将纪元转换为日期

问题描述 投票:0回答:2

我想以纪元或毫秒为单位获取今天的日期,但时间部分设置为今天开始,即 24:00(午夜)

例如

目前时间是 10-APR-2013 17:56:44.455 其中

mili-seconds is 1365613004461
epoch = 1365613004

有人可以告诉我如何获取 10-APR-2013 24:00:00 的纪元吗?

java datetime calendar epoch
2个回答
3
投票

您可以将时间设置为 0:00:00,如下所示:

Calendar cal = Calendar.getInstance();
System.out.println(new SimpleDateFormat("dd-MM-yy HH:mm:ss.S").format(cal.getTime()));

cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

System.out.println(new SimpleDateFormat("dd-MM-yy HH:mm:ss.S").format(cal.getTime()));

第一个值打印为

10-04-13 18:10:40.832
,第二个值打印为
10-04-13 00:00:00.0


1
投票

java.time

一天的开始

JSR-310 实现,也称为

java.time
或现代日期时间 API,为我们提供了两种开始一天的方法:

  1. LocalDate#atStartOfDay
    :将日期与午夜时间组合起来,在该日期的开始处创建一个
    LocalDateTime
  2. LocalDate#atStartOfDay(ZoneId zone)
    :根据时区规则,返回从该日期起的最早有效时间的
    ZonedDateTime

演示:

import java.time.*;

public class Main {
    public static void main(String[] args) {
        // Start date-time of the day in the system's time zone
        LocalDateTime ldt = LocalDate.now().atStartOfDay();
        System.out.println(ldt);

        // Start date-time of the day in a given time zone
        ZoneId tz = ZoneId.of("Europe/London");
        ZonedDateTime zdt = LocalDate.now(tz).atStartOfDay(tz);
        System.out.println(LocalDate.now().atStartOfDay());
    }
}

示例运行的输出:

2024-02-23T00:00
2024-02-23T00:00

在线演示

回到你的问题

目前时间是 10-APR-2013 17:56:44.455 其中

毫秒为 1365613004461 纪元 = 1365613004

👆您获得的毫秒数减少了 6 毫秒。 让我们看看如何

import java.time.*;

public class Main {
    public static void main(String[] args) {
        System.out.println(
                LocalDateTime.of(2013, Month.APRIL, 10, 17, 56, 44, 455000000)
                        .atZone(ZoneId.of("Europe/London"))
                        .toInstant()
                        .toEpochMilli()
        );
    }
}

输出:

1365613004455
6

在线演示

您正在寻找的价值

现在您已经了解了具体细节,让我们找到您正在寻找的值

import java.time.*;

public class Main {
    public static void main(String[] args) {
        ZoneId tz = ZoneId.of("Europe/London");
        Instant instant = LocalDate.now(tz)
                .atStartOfDay(tz)
                .toInstant();

        long epochMillis = instant.toEpochMilli();
        long epochSeconds = instant.getEpochSecond();
        System.out.println(epochMillis);
        System.out.println(epochSeconds);
    }
}

示例运行的输出:

1708646400000
1708646400

在线演示

Trail:日期时间了解有关 java.time现代日期时间 API* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7。正在处理 Android 项目,并且您的 Android API 级别仍然不符合 Java-8,请检查 通过脱糖可用的 Java 8+ API 如何在 Android 项目中使用 ThreeTenABP

© www.soinside.com 2019 - 2024. All rights reserved.