【问题标题】:Date formatting日期格式
【发布时间】:2013-10-13 08:25:26
【问题描述】:

我需要解析以下日期格式:

Aug  6, 2013 18:34:16.990423000

所以我尝试了以下方法:

Date startTime;
SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy kk:mm:ss.S", Locale.ENGLISH);
startTime = df.parse("Aug  6, 2013 18:34:16.990423000");

但是mydate.toString 给了我完全不同的日期!

它给了我"Sun Aug 11 11:27:43 IDT 2013"

它与时区有关吗?

顺便说一句,当我表演时

ts = returnTime.getTime() - startTime.getTime();

它似乎返回了正确的答案。但我不确定是否总是如此。

【问题讨论】:

    标签: java date formatting


    【解决方案1】:

    问题在于S,它表示毫秒。它将毫秒数添加到日期,但您有 990423000 毫秒。您可能希望省略格式的 .S 或先截断您的输入,如下例所示:

    Date startTime;
    String dateString = "Aug  6, 2013 18:34:16.990423000";
    SimpleDateFormat df = new SimpleDateFormat("MMM dd, yyyy kk:mm:ss.SSS", Locale.ENGLISH);
    startTime = df.parse(dateString.replaceFirst("\\.(\\d{3})\\d*$", ".$1"));
    System.out.println(new SimpleDateFormat("MMM dd, yyyy kk:mm:ss.SSS").format(startTime));
    

    【讨论】:

    • 首先,非常感谢。这个 reg exp 解决方案对我来说肯定有点先进。但是,它确实奏效了。我还是不明白格式有什么问题?我必须在毫秒的地方只留下 3 位数字吗?是这个问题吗?因为我猜它就像我看到的其他例子一样。
    • 是的,毫秒只能是 3 位数。 SimpleDateFormat.parse 存在时需要更多数字,但会将它们解释为整毫秒 - 而不是纳秒。
    猜你喜欢
    • 2010-11-03
    • 2017-12-17
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    • 1970-01-01
    相关资源
    最近更新 更多