【问题标题】:Get Date in UTC using SimpleDateFormat使用 SimpleDateFormat 获取 UTC 日期
【发布时间】:2015-01-08 08:36:46
【问题描述】:

我正在尝试使用 SimpleDateFormat 来解析 scala 中的日期和时间字符串。我希望创建的 Date 对象采用 UTC 格式,但它将其转换为我的本地时区。设置时区或日历不起作用。

scala> new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
scala> res41.parse("2014-12-12 13:12:45")
//java.util.Date = Fri Dec 12 13:12:45 IST 2014

在像res41.setTimeZone(java.util.TimeZone.getTimeZone("UTC")) 这样设置时区之后(res41 是 Scala REPL 中 SimpleDateFormat 的实例)给了我相同的结果。

如果我设置Calendar,比如res41.setCalendar(cal),其中caljava.util.Calendar 的一个实例,时区也是UTC,不会改变结果。

我不确定我做错了什么。

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/11207110/…(尽管从那时起 Java8 的改进可能会提供更好的答案。)
  • @GáborBakos - 您提到的问题似乎只处理日期对象。它没有回答我的问题。
  • 您可以手动将UTC时区添加到要解析的String和格式中。这样,Date 将位于 UTC 时区。我不确定你为什么需要Calendar
  • 感谢您的建议。让我尝试。但是,我会得到 10000 个字符串。我不想迭代两次来收集时间戳。
  • 在java中尝试了以下代码。它似乎工作正常。DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(sdf.parse("2014-12-12 13:12:45"));结果:2014 年 12 月 12 日星期五 18:42:45 IST

标签: java scala


【解决方案1】:

java.time

您可以使用Java 8 中内置的java.time package。它比 java.util 类更容易使用。

import java.time.ZoneId
java.time.LocalDateTime.now()
java.time.LocalDateTime.now(ZoneId.of("GMT"))
java.time.LocalDateTime.now(ZoneId.of("Asia/Kolkata"))
java.time.LocalDateTime.now(ZoneId.of("Australia/Sydney"))

使用ZoneId,可以获得不同时区的时间。使用正确的time zone names

乔达时间

您也可以使用Joda-Time,特别是如果您不使用Java 8。请参阅DateTimeZone

【讨论】:

    猜你喜欢
    • 2023-03-20
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 2021-02-25
    • 2021-11-10
    • 2020-01-03
    • 1970-01-01
    相关资源
    最近更新 更多