【问题标题】:From date string to utc long in java 8 [duplicate]java 8中从日期字符串到utc long [重复]
【发布时间】:2019-07-29 12:34:55
【问题描述】:

我正在使用 java 8。我收到一个日期字符串,例如“2019-01-01”,我必须将其转换为 UTC 长。我无法先将其转换为日期,因为它已转换为本地时区。

所以在入口我有“2019-01-01”,在出口我需要 1546300800000

我需要一行完成(与 talend 合作...)

欢迎任何帮助。

【问题讨论】:

  • @OleV.V.可以说最好不要将新用户指向该重复项,因为答案正在使用不应该鼓励的旧 Java 日期类。
  • 在链接的原始问题(找到一个新问题,@DodgyCodeException)中,请忽略使用SimpleDateFormatDate 的(许多)答案,因为这些类设计不良且早已过时,前者在特别是出了名的麻烦。我很喜欢my own answer 来推荐它。

标签: java date long-integer utc


【解决方案1】:

这就是你要找的吗?

import java.time.LocalDate;
import java.time.ZoneId;

// one class needs to have a main() method
public class HelloWorld
{
  // arguments are passed using the text field below this editor
  public static void main(String[] args)
  {

    String strDate = "2019-01-01";

    LocalDate localDate = LocalDate.parse(strDate);

    // Replace <Continent> and <City> with correct values such as: Europe/Paris
    // ZoneId zoneId = ZoneId.of("<Continent>/<City>"); 
    ZoneId zoneId = ZoneId.systemDefault(); 

    ZonedDateTime zdt = localDate.atStartOfDay(zoneId);
    long epoch = zdt.toEpochSecond();

    System.out.println(epoch);
  }
}

注意:如果您使用 LocalDateTime,这也有效

【讨论】:

  • 您好,感谢您的回答。该解决方案给了我编译错误。我从其他地方得到了最终解决方案:long epoch =LocalDate.parse(strDate, DateTimeFormatter.ISO_LOCAL_DATE).atStartOfDay(ZoneId.of("UTC")).toInstant().toEpochMilli();
  • @spr654 你得到什么编译错误?此答案中唯一的“错误”是在注释行中使用Zone 而不是ZoneId。其他一切正常。
  • @spr654 很抱歉。当我写答案时,我有一个会议即将到来。我测试并更新了我共享的代码,再看看。无论如何,我很高兴你成功了。
【解决方案2】:

按要求在一个(较长的)行中:

long t = LocalDate.parse("2019-01-01").atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli();

逻辑与the very good answer by acarlstein 中的相同,除了他从纪元开始获得秒数 (1 546 300 800),我得到毫秒数 (1 546 300 800 000)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2020-03-27
    相关资源
    最近更新 更多