我想以纪元或毫秒为单位获取今天的日期,但时间部分设置为今天开始,即 24:00(午夜)
例如
目前时间是 10-APR-2013 17:56:44.455 其中
mili-seconds is 1365613004461
epoch = 1365613004
有人可以告诉我如何获取 10-APR-2013 24:00:00 的纪元吗?
您可以将时间设置为 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
。
JSR-310 实现,也称为
java.time
或现代日期时间 API,为我们提供了两种开始一天的方法:
LocalDate#atStartOfDay
:将日期与午夜时间组合起来,在该日期的开始处创建一个 LocalDateTime
。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。