【问题标题】:Convert numeric value to date in Java [duplicate]在Java中将数值转换为日期[重复]
【发布时间】:2019-02-19 02:47:25
【问题描述】:

我正在尝试将数字字符串值转换为日期。

我的代码是

String input =  "1537011000";
Date d = new SimpleDateFormat("ddMMMM").parse(input);
String output = new SimpleDateFormat("MMMM dd, yyyy").format(d);
System.out.println("output = " + output);

**但我无法转换。我收到了Exception: Unparseable date: "1537011000"

预计结果是 9 月 15 日

【问题讨论】:

  • “1537011000”代表什么?自某个起点以来的(毫秒)秒数?自 1970 年 1 月 1 日以来看起来像秒(而不是毫秒)
  • 我建议你避免使用SimpleDateFormat 类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。

标签: java date


【解决方案1】:

SimpleDateFormat("ddMMMM").parse(input) 解析一个字符串input,它应该包含一个以给定格式格式化的日期,在你的例子中是“ddMMMM”。所以它期望像“18Sept”(其中 18 是一年)而不是纪元时间。您必须将纪元时间转换为数据,然后以所需的格式打印。

【讨论】:

    【解决方案2】:

    是秒数,Date用ms。而新的日期时间类(LocalDateTime)应该是首选方式。

        LocalDateTime t = LocalDateTime.ofEpochSecond(1537011000L, 0, ZoneOffset.UTC);
        Date d = new Date(1537011000L*1000);
        System.out.println(t);
        System.out.println(d);
    
    2018-09-15T11:30
    Sat Sep 15 13:30:00 CEST 2018
    

    【讨论】:

    • 或者更简单:Instant.ofEpochSecond(1_537_011_000);还保留了偏移信息(如果可能,最好避免使用过时且设计不佳的Date 类)。
    • @OleV.V. Instant.ofEpochSecond 也是我的第一个想法;确实最干净,虽然需要更多的概述,深入了解如何使用许多类。 OP 提到了Date,所以提到了 s/ms 问题。
    【解决方案3】:

    您的值中似乎有 Epoch 秒,因此您可以使用 new Date(long) 使用该值乘以 1000 的长表示:

    Date d = new Date(Long.parseLong(input) * 1000);
    

    d 设置为Sep 15th

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-24
      • 1970-01-01
      • 2020-09-08
      • 1970-01-01
      • 1970-01-01
      • 2018-08-09
      • 1970-01-01
      相关资源
      最近更新 更多