【问题标题】:specific date string format [duplicate]特定日期字符串格式[重复]
【发布时间】:2016-08-04 09:20:06
【问题描述】:

我从网络服务获取日期字符串。
它们采用以下字符串格式。
"2016-04-12 12:18:11.000 EDT"
文档不是很好,但我想这是一些标准的日期格式。
你认识这种格式吗?
我怎样才能最容易地将其解析为Date?

【问题讨论】:

  • 其实文档真的很不错,还附带了tutorial
  • 我指的是 Web 服务文档。哇,4 票反对……这太疯狂了。谢谢一堆。人们对 SO Java 标记非常有帮助。
  • 你有一个Java金徽章,不知道如何搜索解析String to Date?这就是我所说的“哇”。
  • 我猜反对票是因为想知道该字符串的哪一部分让您感到困惑。 2016 看起来像一年。 04 和 12 显然是月份和日期。 12:18:11 确实看起来像一个时间,.000 是毫秒。 EDT 很可能是美国的“东部夏令时间”。
  • @Tom 算了吧。

标签: java date


【解决方案1】:

使用这个模式:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");


y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
z   Time Zone

【讨论】:

  • 另一个答案建议 zzz 而不是 z (用于时区)。有什么区别?
  • 其实没有区别。一个z 就够了。
【解决方案2】:

你可以这样做:

String date = "2016-04-12 12:18:11.000 EDT";
DateFormat parseFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z", Locale.US);
Date d = parseFormat.parse(date);

如果您的系统使用不同的语言,则区域设置很重要。

【讨论】:

    【解决方案3】:

    我认为是yyyy-MM-dd HH:mm:ss.SSS zzz 或yyyy-dd-MM HH:mm:ss.SSS zzz

    根据您的示例 2016-04-12,它可以是 2016 年 4 月 12 日或 2016 年 12 月 4 日

    考虑yyyy-MM-dd HH:mm:ss.SSS zzz的简单示例

    DateFormat gmtFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS zzz");
        TimeZone gmt = TimeZone.getTimeZone("GMT");
        gmtFormat.setTimeZone(gmt);
        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S");
        Date dd = df.parse("2016-04-12 12:18:11.000 EDT");
        System.out.println( gmtFormat.format(dd));
    

    输出:2016-04-12 06:48:11.000 GMT

    【讨论】:

    • 在我的情况下,月份是第一位的,谢谢。我会试试看。
    猜你喜欢
    • 2012-05-09
    • 2012-01-07
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多