【问题标题】:Convert Android's date Strings to date objects将 Android 的日期字符串转换为日期对象
【发布时间】:2012-01-28 06:07:05
【问题描述】:

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

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

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

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 中,我不知道我会遇到哪种格式,不是吗?

【问题讨论】:

    标签: java android date time


    【解决方案1】:
    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();
            }
    

    【讨论】:

      【解决方案2】:

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

      您可以像这样获取当前设置的日期格式:

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

      【讨论】:

      • 感谢您提供的友好而有帮助的答案!我正在为一个事件查询联系人表: cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE))
      • ... 这是我以字符串形式获得日期的地方,例如“2011-12-24T00:00:00Z”。如何将日期作为 Date 对象获取?没有方法“cursor.getDate()”...
      • 这种情况下可以解析。此外,无论语言设置如何,此日期格式都是相同的,因此您可以放心地假设。
      • 啊,在这种情况下没有办法获取日期对象吗? :D 必须有一种方法 - 解析字符串是愚蠢的,可能导致错误的结果,不是吗?我怎么知道我会遇到哪些格式?哪个时区?
      • 无论用户选择何种语言,您将始终获得相同的格式。因此,无论您在测试中获得什么,都是您将永远得到的。不将格式传递给日期解析函数是使用它的安全方法。
      猜你喜欢
      • 2020-05-21
      • 2020-11-30
      • 2016-05-24
      • 2011-03-07
      • 1970-01-01
      • 2011-10-25
      • 2022-01-11
      • 2013-03-07
      相关资源
      最近更新 更多