第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么日期轉(zhuǎn)換會返回不同的時間戳?

為什么日期轉(zhuǎn)換會返回不同的時間戳?

慕的地8271018 2023-03-31 14:43:25
我正在將 GregorianCalendar 實例轉(zhuǎn)換為 Date 以獲得 unix 時間戳。但我想知道為什么相同的日期每次都返回不同的 Unix 時間戳。SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");Calendar calendar = new GregorianCalendar();calendar.set(2018, 0, 1, 0,0,0);System.out.println(sdf.format(calendar.getTime()));Date date = calendar.getTime();System.out.println(sdf.format(date));System.out.println(date.getTime());日期本身是正確的,并且始終相同,"2018/01/01 00:00:00"。但是為什么每次的unix時間戳都不一樣呢?例如,這些是 5 次執(zhí)行后的值。15147612006241514761200618151476120079715147612002091514761200132
查看完整描述

4 回答

?
紅糖糍粑

TA貢獻1815條經(jīng)驗 獲得超6個贊

當(dāng)您創(chuàng)建新日歷時,它包含當(dāng)前日期和時間。之后,您更新除毫秒之外的所有字段。如您所見,所有輸出中只有最后 3 個數(shù)字不同,這是執(zhí)行時間的毫秒數(shù)。



查看完整回答
反對 回復(fù) 2023-03-31
?
倚天杖

TA貢獻1828條經(jīng)驗 獲得超3個贊

java.time

    ZoneId zone = ZoneId.of("Europe/Brussels");

    ZonedDateTime start2018 = LocalDate.of(2018, Month.JANUARY, 1).atStartOfDay(zone);

    Instant asInstant = start2018.toInstant();

    System.out.println(asInstant.toEpochMilli());

這始終提供以下輸出:


1514761200000


如果不是歐洲/布魯塞爾,請?zhí)鎿Q您想要的時區(qū)。


格式化輸出:


    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");

    System.out.println(start2018.format(formatter));

2018/01/01 00:00:00


您使用的日期和時間類 — SimpleDateFormat、Calendar和GregorianCalendar—Date都設(shè)計不佳且早已過時。SimpleDateFormat特別是出了名的麻煩,但在這種情況下,正是糟糕的設(shè)計Calendar給了你意想不到的結(jié)果。其他答案已經(jīng)解釋了如何,我就不用重復(fù)了。我建議您使用現(xiàn)代 Java 日期和時間 API java.time,而不是舊類。與它一起工作要好得多。


查看完整回答
反對 回復(fù) 2023-03-31
?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

在時間戳中,最后 3 位數(shù)字代表毫秒。在這里,您明確設(shè)置了日期和時間,但沒有設(shè)置毫秒。這就是你面對這個的原因。為避免這種情況,您可以將其添加到您的代碼中:

calendar.set(Calendar.MILLISECOND, 0);


查看完整回答
反對 回復(fù) 2023-03-31
?
Helenr

TA貢獻1780條經(jīng)驗 獲得超4個贊

我假設(shè)您正在示例中的循環(huán)中實例化所有內(nèi)容?


如果是這樣,則您沒有設(shè)置毫秒差異,因此它們在循環(huán)的每次迭代中都會發(fā)生變化(但略有變化)。


為避免這種情況,您可以設(shè)置毫秒數(shù),或在循環(huán)外進行實例化:


SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");

Calendar calendar = new GregorianCalendar();

calendar.set(2018, 0, 1, 0, 0, 0);

for (int i = 0; i < 5; i++) {

     System.out.println(sdf.format(calendar.getTime()));

     Date date = calendar.getTime();

     System.out.println(sdf.format(date));

     System.out.println(date.getTime());

}

這將產(chǎn)生:

2018/01/01 00:00:00

2018/01/01 00:00:00

1514764800128

2018/01/01 00:00:00

2018/01/01 00:00:00

1514764800128

2018/01/01 00:00:00

2018/01/01 00:00:00

1514764800128

2018/01/01 00:00:00

2018/01/01 00:00:00

1514764800128

2018/01/01 00:00:00

2018/01/01 00:00:00

1514764800128


查看完整回答
反對 回復(fù) 2023-03-31
  • 4 回答
  • 0 關(guān)注
  • 233 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號