2011-12-27 116 views
2

在Android中,每个事件(例如生日和周年纪念日)都以字符串格式保存,例如, “2011-12-24”。将Android的日期字符串转换为日期对象

这是至少我的手机的情况。如果其他手机的日历与公历不同,则其他手机可能会以其他格式存储这些日期。

即使是设置了公历日历的手机,也有日期字符串,包括小时,分钟和不带。我得到这样一个日期字符串,当我查询联系人表的事件:

cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.ST‌​ART_DATE)) 

这导致(例如):

“2011-12-14”或“2011-12-24T00: 00:00Z“

您可以看到有很多不同的可能格式。为了计算日期,我需要将它们从String转换为Date对象,不需要我吗?

我该怎么做?

PS:我知道有面向Java日期对象解析函数:

DateFormat myDateFormat = new SimpleDateFormat("dd/MM/yy"); 
Date tempDate = myDateFormat.parse("24/12/2011"); 

但在Android的,我不知道哪种格式我将要面临的,是吧?

回答

3

Android使用日期对象。任何时候你需要解析一个字符串的日期是因为这个日期已经被序列化了,很可能是在一个文件中。在这种情况下,你会知道使用的格式。 Date对象用在首选项中,几乎在任何地方都可以使用date对象,我认为这涉及到共享服务,活动等等。这意味着,几乎从不需要从日期解析字符串,除非像我说的你正在使用序列化的源代码,从Web服务中读取它等。 如果你可以告诉我们你的场景,你可能会得到更具体的答案。

,您就能获得当前设置的日期格式是这样的:

DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); 
+0

谢谢你的好,乐于助人的答案!我正在查询联系人表中的一个事件:cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE)) – caw 2011-12-27 05:52:12

+0

...这是我得到一个日期字符串形式,例如, “2011-12-24T00:00:00Z”。我怎样才能得到日期作为日期对象?没有方法“cursor.getDate()”... ... – caw 2011-12-28 00:48:26

+0

你可以在这种情况下解析它。此外,无论设置何种语言,此日期格式都是相同的,因此您可以放心地假设。 – 2011-12-28 01:00:50

0
import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

SimpleDateFormat myDateFormat = new SimpleDateFormat("dd/MM/yy"); 
     Date tempDate; 
     try { 
      tempDate = myDateFormat.parse("24/12/2011"); 
       long milliseconds=tempDate.getTime(); 
       Toast.makeText(getApplicationContext(), milliseconds+"", 1).show(); 
     } catch (ParseException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     }