【问题标题】:How to preserve milisecond data on java simpledateFormat如何在 java simpledateFormat 上保存毫秒数据
【发布时间】:2017-07-09 10:03:27
【问题描述】:

基本上我正在尝试将字符串数据转换为时间戳格式。当我将数据转换为时间戳格式时,SimpleDateFormat 增加了三分钟。 因为毫秒数据等于 3 分钟。但我想保留时间戳值的毫秒数据。

代码:

public Double TimestampTest(String Timestamp ){
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
    Date parsedDate = null;
    try {
        parsedDate = dateFormat.parse(Timestamp);   
    } catch (ParseException e1) {
        e1.printStackTrace();
    }
    Timestamp timestamp = new java.sql.Timestamp(parsedDate.getTime());
...
} 

时间戳值

2002-04-17 23:45:58.983

测试用例

System.out.println(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").parse("2015-04-22T19:54:11.219983Z"));
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS'Z'").parse("2015-04-22 19:54:11.219983Z"));

结果都是一样的

Wed Apr 22 19:57:50 EEST 2015

Wed Apr 22 19:57:50 EEST 2015

因为

219 983 milliseconds = 3.66638333 minutes

总而言之,我想保留 ms 数据。有什么办法吗?

【问题讨论】:

标签: java timestamp simpledateformat milliseconds minute


【解决方案1】:

如果我理解,字符串末尾的值是微秒,而不是毫秒。旧的、过时的 Date 和 SimpleDateFormat 类不支持微秒。但是你可以使用新的 java.time 类:

System.out.println(ZonedDateTime.parse("2015-04-22T19:54:11.219983Z",
                                       DateTimeFormatter.ofPattern(("yyyy-MM-dd'T'HH:mm:ss.SSSSSSVV"))));

【讨论】:

  • 我相信在这种情况下你可以在没有格式化程序的情况下使用parse - 尽管我没有在电脑前进行测试
  • @Hugo 是正确的。如果您要求精确到 6 位小数,则需要一个格式化程序,但对于大多数用途来说,显式格式化程序只会使代码混乱。 ZonedDateTime.parse("2015-04-22T19:54:11.219983Z") 有效。否则答案是非常好的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-09
  • 1970-01-01
  • 1970-01-01
  • 2020-12-12
  • 2011-11-01
  • 2011-09-26
相关资源
最近更新 更多