[英]Android Calendar.getTime().getTime() always returning -1 day
我通過提供時區然后將日、月和年設置為日歷來創建日歷實例。 但是當我試圖以毫秒為單位獲取時間時,它總是以毫秒為單位返回 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);
我正在設置 bu 它返回我selectedDate為1624986000000即星期二 2021 年 6 月 29 日 22:30:00
這是 getCountryCalendar() 方法。
如果我選擇 6 月 30 日,那么它應該以毫秒為單位返回 6 月 30 日。 我不知道為什么會這樣。 任何建議表示贊賞。
public Calendar getCountryCalendar() {
return Calendar.getInstance(TimeZone.getTimeZone("Asia/Bangkok"));
}
LocalDate
.of( y , m , d )
.atStartOfDay( ZoneId.of( "Asia/Bangkok" ) )
.toInstant()
.toEpochMilli()
現代解決方案使用java.time類,該類多年前取代了舊的日期時間類,例如Calendar
。
建立僅限日期的值。
LocalDate ld = LocalDate.of( y , m , d ) ;
顯然,您希望在特定時區中看到該日期中一天中的第一個時刻。 不要硬編碼 00:00:00.0 的時間。 某些時區的某些日期可能不存在該時間。 讓java.time確定一天中的第一個時刻。
ZoneId z = ZoneId.of( "Asia/Bangkok" ) ;
ZonedDateTime zdt = ld.atStartOfDay( z ) ;
顯然,您想將其轉換為從 UTC 中看到的 1970 年第一時刻的紀元參考開始的毫秒數。 Instant
類代表在 UTC 中看到的時刻。
long millis = zdt.toInstant().toEpochMilli() ;
時間戳1624986000000
確實是Asia/Bangkok
時區的Jun 30, 00:00:00
。 您甚至可以在這里查看。
另一方面,科爾卡塔和科倫坡時區將此時間戳呈現為Jun 29 2021 22:30:00
。
由於您尚未共享將時間戳轉換為 22:30:00 的代碼,因此我假設在那段代碼中您沒有使用正確的時區(而是Asia/Colcata
或Asia/Colombo
或其他匹配GMT +05:30
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.