Java 转换Android';将日期字符串转换为日期对象

Java 转换Android';将日期字符串转换为日期对象,java,android,date,time,Java,Android,Date,Time,在Android中,每个事件的日期(如生日和周年纪念日)都以字符串格式保存,例如“2011-12-24” 至少我的手机是这样的。如果日历与公历不同,其他一些手机可能会以其他格式存储这些日期 即使是设置了公历的手机,也有带有小时和分钟的日期字符串,而没有。在查询联系人表中的事件时,我会得到这样一个日期字符串: cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.ST‌​ART_DATE)) 这

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

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

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

cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.ST‌​ART_DATE))
这导致(例如):

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

你可以看到有很多不同的格式。为了使用日期进行计算,我需要将它们从字符串转换为日期对象,不是吗

我该怎么做

PS:我知道java日期对象有一个解析函数:

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

但是在安卓系统中,我不知道我会遇到哪种格式,是吗?

安卓系统使用日期对象。任何时候需要从字符串解析日期都是因为该日期已序列化,很可能是在文件中。在这种情况下,您将知道所使用的格式。Date对象在首选项中使用,Date对象几乎在我能想到的与共享服务、活动等相关的任何地方都使用。这意味着,几乎不需要从Date解析字符串,除非,如我所说,您正在使用序列化源,从web服务等读取它。 如果你能告诉我们你的情况,你可能会得到更具体的答案

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

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

谢谢你的回答!我正在查询联系人表中的一个事件:cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataTypes.event.START\u DATE))。。。这就是我得到字符串形式的日期,例如“2011-12-24T00:00:00Z”。如何将日期作为日期对象获取?没有方法“cursor.getDate()”…在本例中,您可以对其进行解析。此外,无论语言设置如何,此日期格式都是相同的,因此您可以放心地假设。啊,在这种情况下,无法获取日期对象吗必须有一种方法——解析字符串是愚蠢的,可能会导致错误的结果,不是吗?我如何知道我将面对哪些格式?哪个时区?无论用户选择何种语言,您将始终获得相同的格式。所以无论你在测试中得到什么,你都会得到。不将格式传递给日期解析函数是使用它的安全方法。
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();
        }