有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (3) 个答案

  1. # 1 楼答案

    试试这个:

    new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZ").format(new Date())
    

    如果你想要比毫秒更精确,请看这个link

  2. # 2 楼答案

    第一点,摆脱SimpleDateFormat。那门课出了名的麻烦,而且早已过时。而且SimpleDateFormat不可能在几秒钟内产生7位小数

    第二点,你可能不需要在秒数上打印7个小数。通过2019-12-18T17:11:24.2646051+03:30示例说明的格式是ISO 8601。在ISO 8601中,秒的小数位数是自由的,因此如果你给他们一个包含3个小数、9个小数或根本没有小数的字符串,每个人都应该接受(在最后一种情况下,也不要使用小数点)

    爪哇。时间

    因此,简单的解决方案是:

        String desiredString
                = OffsetDateTime.now(ZoneId.systemDefault()).toString();
        System.out.println(desiredString);
    

    我刚才运行代码时的输出:

    2019-12-28T11:46:07.308+01:00

    我正在使用java。时间,现代Java日期和时间API。我正在利用java日期和时间类的toString方法这一事实。时间打印ISO 8601格式。所以到目前为止,我们还不需要显式格式化程序

    如果你想要或需要7位小数,一定要使用^{

        DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                .append(DateTimeFormatter.ISO_LOCAL_DATE)
                .appendLiteral('T')
                .appendPattern("HH:mm:ss.SSSSSSSXXX")
                .toFormatter();
        String desiredString = OffsetDateTime.now(ZoneId.systemDefault())
                                    .format(formatter);
    

    2019-12-28T11:48:52.3840000+01:00

    可以仅使用格式模式字符串指定格式化程序,但我更喜欢在代码长几行时,对日期部分重用内置的ISO_LOCAL_DATE格式化程序

    链接

  3. # 3 楼答案

    可以使用S表示毫秒。见this documentation page。但你不能使用超过3个;似乎不支持微秒或更细粒度的选项

    import java.text.SimpleDateFormat;  
    import java.util.Date;  
    
    class Main {
      public static void main(String[] args) {
    
        String s = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").format(new Date());
    
        System.out.println(s);
      }
    }
    

    输出示例:

    2019-12-28T10:28:02.933Z
    

    如果确实需要更高的粒度,可以选择使用Instant.now()函数,尽管以下代码只会生成6位数字(微秒,没有纳秒):

    import java.time.Instant;
    
    class Main {
      public static void main(String[] args) {
        System.out.println(Instant.now().toString());
      }
    }
    

    输出示例:

    2019-12-28T10:31:56.477551Z
    

    有关更多信息,请参见this answer