【问题标题】:Convert date with nanoseconds in java在java中用纳秒转换日期
【发布时间】:2017-10-17 15:01:31
【问题描述】:

我有一个格式为 “2017-05-17 00:31:16.227” 的日期,我需要将其转换为 “17-MAY-17 12.31.16.227000000 AM”

String convertTimestamp(Timestamp date) {

    String newstring = null;
    try {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss.SSSSSSSSS");
        java.util.Date date1 = dateFormat.parse(date.toString());
        DateFormat sdf = new SimpleDateFormat("dd-MMM-yy hh.mm.ss.SSSSSSSSS aa");
        newstring = sdf.format(date1);

    } catch (Exception e) {
        e.printStackTrace();
    }

    System.out.println("new string" + newstring);

    return newstring;
}

但我得到的值是这样的 **"17-MAY-17 12.31.16.000000227 AM"

【问题讨论】:

  • 只需使用yyyy-MM-dd hh:mm:ss.SSS000000
  • 日期可以是这样的 2017-05-17 00:31:16.227111(纳秒内最多 6 个字符)@DawoodibnKareem
  • 祝你好运,把它变成java.util.Date
  • 九位小数表示纳秒,而不是标题中提到的微秒。微秒将是 位小数。
  • @BasilBourque 从来都不是中午。 24 小时制中的 00 和 12 小时制中的 12am 均指午夜。问题的这个方面是完全正确的。 12 小时制时钟在一天中的两个半小时从 01 运行到 12,并且没有 00 这样的东西。

标签: java string timestamp


【解决方案1】:

您正在使用麻烦的旧旧日期时间类,这些类现在已被 java.time 类所取代。这些遗留类仅限于milliseconds,这意味着在几分之一秒内保留三位小数。所以遗留类不能处理你想要的九位数字。

您想要的九位小数表示分辨率为nanoseconds,而不是毫秒。幸运的是,java.time 类具有纳秒级的分辨率。

将您的输入解析为 LocalDateTime 对象,因为它没有任何时区指示或与 UTC 的偏移量。将中间的空格替换为“T”以符合标准 ISO 8601 格式。

String input = "2017-05-17 00:31:16.227".replace( " " , "T" ) ;
LocalDateTime ldt = LocalDateTime.parse( input );

您应该能够在表示此LocalDateTime 对象值的字符串中强制在小数部分中添加所需的尾随零。使用DateTimeFormatterDateTimeFormatterBuilder

【讨论】:

    猜你喜欢
    • 2015-04-21
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多