【发布时间】:2024-04-23 03:10:01
【问题描述】:
我通过提供时区然后将日、月和年设置为日历来创建日历实例。但是当我试图以毫秒为单位获取时间时,它总是以毫秒为单位返回 dateTime -1 天。
这是我设置日历的方式。
DatePickerDialog datePickerDialog = new DatePickerDialog(Objects.requireNonNull(getContext()), R.style.DialogTheme, (view, year, month, dayOfMonth) -> {
Calendar calendar = new DateUtils().getCountryCalendar();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, (month));
calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long selectedDate = calendar.getTime().getTime();
}, mYear, mMonth, mDay);
我设置但它返回我 selectedDate 为 1624986000000 这是 Tue Jun 29 2021 22:30:00
这里是 getCountryCalendar() 方法。
如果我选择 6 月 30 日,那么它应该以毫秒为单位返回 6 月 30 日。我不知道为什么会这样。任何建议表示赞赏。
public Calendar getCountryCalendar() {
return Calendar.getInstance(TimeZone.getTimeZone("Asia/Bangkok"));
}
【问题讨论】:
-
UTC+7 时区的午夜仍然是 UTC
-
我建议你不要使用
Calendar。该课程设计不良且早已过时。而是使用LocalDate、Instant和来自java.time, the modern Java date and time API 的其他类。 -
不存在 6 月 30 日,以毫秒为单位。毫秒值定义了一个时间点,在那个时间点是地球上不同时区的两天,有时是三天。
标签: android date datetime calendar timezone