2013-08-07 2 views
5

У меня есть службы REST, который загружает информацию о событиях в календаре лиц ...Split строки даты/времени

Когда он возвращает дату и время, она возвращает их в виде строки

например дата = «12/8/2012» & время = «11:25 AM»

Чтобы поместить это в андроида календарь, мне нужно сделать следующее:

Calendar beginTime = Calendar.getInstance(); 
beginTime.set(year, month, day, hour, min); 
startMillis = beginTime.getTimeInMillis(); 
intent.put(Events.DTSTART, startMillis); 

Как я могу разделить дату и временные переменные, чтобы их можно было использовать в методе beginTime.set()?

+1

Используйте метод String.split. –

ответ

8

Я не думает, что вам действительно нужно, как разделить строку, в вашем случае это должно быть «как получить время в миллисекундах от строки даты», вот пример:

import java.text.DateFormat; 
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

public class DateTest { 

    public static void main(String[] args) { 
     String date = "12/8/2012"; 
     String time = "11:25 am"; 
     DateFormat df = new SimpleDateFormat("MM/dd/yyyy hh:mm a"); 
     try { 
      Date dt = df.parse(date + " " + time); 
      Calendar ca = Calendar.getInstance(); 
      ca.setTime(dt); 
      System.out.println(ca.getTimeInMillis()); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
0

Вы можете увидеть пример разделенного метода здесь: How to split a string in Java

Затем просто использовать массив для вашего параметра, например: Array [0] за год и т.д ..

1

Предполагая, что вы получите дату в строки (если нет, преобразуйте его!), а затем это:

String date = "12/8/2012"; 
String[] dateParts = date.split("/"); 
String day = dateParts[0]; 
String month = dateParts[1]; 

Аналогичным образом вы также можете разделить время!

2

Попробуйте это:

String date = "12/8/2012"; 
String time = "11:25 am"; 

String[] date1 = date.split("/"); 
String[] time1 = time.split(":"); 
String[] time2 = time1[1].split(" "); // to remove am/pm 

Calendar beginTime = Calendar.getInstance(); 
beginTime.set(Integer.parseInt(date1[2]), Integer.parseInt(date1[1]), Integer.parseInt(date1[0]), Integer.parseInt(time1[0]), Integer.parseInt(time2[0])); 
startMillis = beginTime.getTimeInMillis(); 
intent.put(Events.DTSTART, startMillis); 

Надеется, что это помогает.

+2

Это будет работать, но Calendar.set ожидает целые числа. Поэтому вы должны использовать Integer.parseInt (date1 [x]); в установленном методе. EDIT: Также заметил, что календарь использует 24-часовой такт, поэтому вам также нужно будет преобразовать time2 [0] с 12 до 24 часов на основе am/pm в time2 [1] – jayrobin

+0

Ok @jayrobin Спасибо .. Я отредактирую –

0

Используйте SimpleDateFormat (проверьте api docs). Если вы предоставите правильный шаблон времени, он сможет мгновенно преобразовать строку в Date.

0

Это просто идея, вы можете сделать что-то вроде этого без разделения

DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm a"); 
    Date date = formatter.parse("12/8/2012 11:25 am");  
    Calendar cal=Calendar.getInstance(); 
    cal.setTime(date); 
Смежные вопросы