将Android的日期字符串转换为日期对象

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

至少我手机的情况如此。 如果某些其他手机的日历与格里高利日历不同,则可能会将这些日期存储为其他格式。

即使对于具有公历日历的手机,也有日期字符串,小时和分钟,没有。 当我在contacts表中查询事件时,我得到了这样一个日期字符串:

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中,我不知道我将面对哪种格式,是吗?

Android适用于日期对象。 任何时候你需要从字符串解析日期是因为该日期已被序列化,很可能在文件中。 在这种情况下,您将知道使用的格式。 日期对象在首选项中使用,日期对象几乎用于我能想到的与共享服务,活动等相关的任何地方。这意味着,几乎从来没有必要从日期解析字符串,除非,就像我说你正在使用序列化的源代码,从Web服务中读取它等。如果您可以告诉我们您的方案,您可能会得到更具体的答案。

您可以获取当前设置的日期格式,如下所示:

 DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); 
 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(); }