当前位置: 首页 > 知识库问答 >
问题:

使用SimpleDateFormat解析日期字符串

容修贤
2023-03-14
2011-03-02T09:06:07.404-07:00

下面是SimpleDateFormat的设置。

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

下面是开发人员文档中可解析日期字符串的可能差异列表。正如您所看到的,它们中没有一个在时区中有冒号。

                     yyyy-MM-dd 1969-12-31
                     yyyy-MM-dd 1970-01-01
               yyyy-MM-dd HH:mm 1969-12-31 16:00
               yyyy-MM-dd HH:mm 1970-01-01 00:00
              yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800
              yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000
       yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800
       yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000
     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800
     yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000

我的第二个问题是当我得到一个时区设置为Z的日期字符串时,这是将时区设置为GMT的标准,相当于0000。然而,我又得到了一个ParseException。下面是日期字符串的一个示例。

2011-01-14T10:50:31.520Z
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
Date date = null;
try {
    Log.d("CCDateUtilss", "Need to remove the colon from the date string in the timeszone");
    date = sdf.parse(string);
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
return date.getTime();

提前致谢

共有1个答案

钱经业
2023-03-14

我使用以下Aprocah解析来自不同来源的文本日期,这些来源可能返回不同的格式(包括带冒号的时区):

private SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");


private long getTime(String time) throws Exception {
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
        //For this you may need to manually adjust time offset
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ");
    }
    try {
        return this.format.parse(time).getTime();
    } catch (Exception e) {
        format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss'Z'");
        //For this you may need to manually adjust time offset
    }
    return this.format.parse(time).getTime();
}

注意:如果字符串z结尾,则可能需要手动调整时区偏移量。

为了效率,这总是先尝试最后一个工作格式。

 类似资料:
  • 问题内容: 我正在尝试将UTC中的字符串格式日期转换为日期对象,这导致转换关闭了几分钟。 解析日期字符串之前- 解析后的日期是 正确的日期转换是 转换之间大约相差12-13分钟。我已经观察到转换在10分钟范围内的差异。 知道出了什么问题吗? 问题答案: 解析的是毫秒数,而不是您期望的毫秒数。 788810毫秒是13分钟,8秒和810毫秒。因此,您的结果实际上是2014-07-07T18:27:31

  • 我尝试将字符串转换为日期。

  • 问题内容: 我真的很head头。我使用s已有一段时间了,但现在,使用SimpleDateFormat解析日期(只是有时)是完全错误的。 特别: 打印字符串。有没有搞错?-它甚至都不会一直解析为错误的日期! 更新: 修复得很漂亮。您不知道吗,在其他一些地方也滥用了它。一定喜欢调试别人的代码:) 问题答案: 我认为您要使用格式,而不是’hh’,以便您使用00-23之间的小时数。“ hh”采用12小时增

  • 问题内容: SimpleDateFormat: 抛出的异常: 有任何想法吗? 编辑: 感谢您的快速解答。你们都是正确的,我只是错过了SimpleDateFormat文档中的一个关键句子-我可能应该把它称为一天。 问题答案: 从SimpleDateFormat javadocs : 月:如果图案字母的数目为3或更多,则将月份解释为文本;否则,将其解释为数字。 尝试使用“ MMM dd yyyy”之类

  • 例如,我得到了这个日期字符串: 看起来Android无法解析某些时区。感谢@Burhanuddin Rashid的这种方法。 此处的解决方案:不可更改的日期:“IST 2014年星期五10月10日23:11:07”(偏移量20)

  • 问题内容: 将日期转换为其他格式的字符串时遇到问题。日期: 我想将此格式转换为另一种格式:。 当我尝试将其转换时,使用以下方法会得到不同的结果: 我得到了错误的结果,该月已替换为分钟: 问题答案: 这是错误的。这应该是。有关将日期从一种格式转换为另一种格式的更多详细信息,请参见此http://docs.oracle.com/javase/6/docs/api/java/text/SimpleDat