0

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

例如

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

mili-seconds is 1365613004461
epoch = 1365613004

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

4

2 回答 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

于 2013-04-10T17:11:59.270 回答
1

java.time

JSR-310 实现,也称为java.time现代日期时间 API,为我们提供了两种获取方式:

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

演示:

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        LocalDateTime ldt1 = LocalDate.of(2016, Month.MARCH, 27).atStartOfDay();
        LocalDateTime ldt2 = LocalDate.of(2016, Month.MARCH, 28).atStartOfDay();
        ZonedDateTime zdt1 = LocalDate.of(2016, Month.MARCH, 27).atStartOfDay(ZoneId.of("Europe/London"));
        ZonedDateTime zdt2 = LocalDate.of(2016, Month.MARCH, 28).atStartOfDay(ZoneId.of("Europe/London"));
        System.out.println(ldt1);
        System.out.println(ldt2);
        System.out.println(zdt1);
        System.out.println(zdt2);
    }
}

输出:

2016-03-27T00:00
2016-03-28T00:00
2016-03-27T00:00Z[Europe/London]
2016-03-28T00:00+01:00[Europe/London]

在此处输入图像描述 资料来源:timeanddate.com

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


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,则可以使用ThreeTen-Backport,它将大部分java.time功能向后移植到 Java 6 和 7。如果您正在为 Android 项目和 Android API 工作level 仍然不符合 Java-8,请检查Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

于 2021-05-22T14:40:55.900 回答