我想以纪元或毫秒为单位获取今天的日期,但时间部分设置为今天开始,即 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
:根据时区规则,从该日期返回最早有效时间的 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 desugaring和How to use ThreeTenABP in Android Project。