【问题标题】:Convert ms into a string date with Java 8使用 Java 8 将 ms 转换为字符串日期
【发布时间】:2015-09-29 06:48:49
【问题描述】:

我有一个时间戳为 ms,并使用如下 SimpleDateFormater 对其进行格式化:

SimpleDateFormat sdfDate = new SimpleDateFormat("MM/d/yyyy h:mm a");

return sdfDate.format(new Date(timeStamp));

现在我想更改它以使用新的 Java 8 功能。似乎我真的找不到一种方法来使用新的 Java 8 类。有人知道了吗?

【问题讨论】:

  • Date 在 java 8 中已弃用。 LocalDate 呢?
  • @Satya, Date 在 Java-8 中未声明为已弃用。

标签: java datetime java-8 java-time


【解决方案1】:

如果您只有一个毫秒值(假设来自 Unix 纪元),您可以使用类似以下的方式获得 LocalDateTime:

LocalDateTime ldt = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());
System.out.println(ldt);

可以打印如下内容:

2015-09-29T16:57:40.077

然后您可以使用以下格式对其进行格式化:

System.out.println(ldt.format(DateTimeFormatter.ofPattern("MM/dd/yyyy h:mm a")));

可以打印类似的内容(基于上一个示例的原始时间):

09/29/2015 4:57 PM

【讨论】:

  • 这就是我所需要的。 Java 8 中不推荐使用 Date 之外,为什么这比我的 2 行代码“更好”?
  • 好吧,它仍然是两行代码(实际上我可以写成一行),但是新的 Time API 更简单,更强大,更易于使用。而不是拥有Date 和Calendar 以及围绕这些的所有有趣的东西。我还认为时间分区可以更好地处理(关于人们如何理解它)(哦,java.util.Date 并没有贬值,但是考虑到新的时间/日期 API 的强大功能,它是多余的)
【解决方案2】:

我希望你可以在 Java 8 中尝试这个从时间戳获取日期:

timeStamp.toLocalDateTime().toLocalDate();

对于格式化,您可以将 LocalDateTime 用作:

String str = "1997-03-18 11:30";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
LocalDateTime dateTime = LocalDateTime.parse(str, formatter);

【讨论】:

    猜你喜欢
    • 2020-09-24
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多