日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java timestamp时间差_关于datetime:如何在java中找到2个时间戳之间的日差

發(fā)布時間:2025/3/19 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java timestamp时间差_关于datetime:如何在java中找到2个时间戳之间的日差 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本問題已經有最佳答案,請猛點這里訪問。

我想計算2個時間戳之間有多少天的差異,但我不想考慮時差。

例如 :

long time1 = 1546258765000 ?(Mon 31 December 2018 13:19:25)

long time2 = 1546005915367 (Fri 28 December 2018 15:05:15)

結果應該還有3天,3天到期......

由于時間我從這個方法得到2:

TimeUnit.DAYS.convert(time1 - time2 , TimeUnit.MILLISECONDS))

我只需要為time1和time2設置相同的時間,然后回到時間戳并按此計算...但我不確定最好的方法是什么。

你在哪個時區(qū)? 好像你在UTC偏移+01:00? 您需要確定一個時區(qū),以便將long值轉換為日期。

將millis轉換為LocalDateTime,然后計算Duration:

LocalDateTime start = LocalDateTime

.ofInstant(Instant.ofEpochMilli(1546005915367L), ZoneId.systemDefault())

.truncatedTo(ChronoUnit.DAYS);

LocalDateTime stop = LocalDateTime

.ofInstant(Instant.ofEpochMilli(1546258765000L), ZoneId.systemDefault())

.truncatedTo(ChronoUnit.DAYS);

Duration duration = Duration.between(start, stop);

long dayDifference = duration.toDays();

非常感謝您的幫助!

此答案中的代碼中的truncatedTo調用對于獲得精確結果至關重要(另一種方法是轉換為LocalDate,因為這也會截斷)。

注意:正如Ole V.V所述:這僅適用于UTC。由于時間戳始終是UTC,如果您在另一個時區(qū),它可能會返回不需要的結果。例:

在GMT + 1:

time1 = 1546216200000L (Mon 31 December 2018 01:30:00) (31/12 00:30 on UTC)

time2 = 1545953400000L (Fri 28 December 2018 00:30:00) (27/12 11:30 on UTC)

這將導致4天的差異,因為這是UTC的差異。

為了彌補這一點,您應該抵消差異,以便時間戳顯示當前時間,而不是UTC時間。 (例如,如果您使用的是GMT + 1,則需要為每個時間戳添加1小時(3600000 ms))。

我相信最簡單的方法可能是使用模塊:

final long MILLIS_PER_DAY = 1000*60*60*24;

long time1 = 1546258765000L; // (Mon 31 December 2018 13:19:25)

long time2 = 1546005915367L; // (Fri 28 December 2018 15:05:15)

// Set both times to 0:00:00

time1 -= time1 % MILLIS_PER_DAY;

time2 -= time2 % MILLIS_PER_DAY;

然后

TimeUnit.DAYS.convert(time1 - time2 , TimeUnit.MILLISECONDS))

應該給你想要的結果。

time1%MILLIS_PER_DAY始終為0

不,不是。我只是測試它以防萬一我輸入錯誤的東西,但它完美無缺

你完全正確,這是我的錯,非常感謝你的幫助

這將給出UTC的預期結果。在其他時區(qū),它有時會,有時結果將是一天太多或太少。該算法非常適合我的口味。我寧愿把更多的工作留給庫方法。

@ OleV.V。實際上它會將兩個時間戳設置為同一時間,因此時區(qū)并不重要,它總是可以正常工作(因為我們不關心日期,只關注差異)。我通常盡量避免使用庫方法,這是一個簡單的任務,我不喜歡我的程序太重

我在歐洲/哥本哈根時區(qū)。我用time1 = 1546216200000L(2018年12月31日01:30:00)和time2 = 1545953400000L(2018年12月28日00:30:00)嘗試了你的代碼。預期差異:3天。印刷差異:4天。您的代碼在UTC之外提供了錯誤的結果

@ OleV.V。你是對的,我沒有真正考慮過這個案子,謝謝你指出來。編輯答案澄清這一點,并添加了一個解決方案

使用joda-time lib:

long time1 = 1546258765000L;

long time2 = 1546005915367L;

DateTime dateTime1 = new DateTime(time1);

DateTime dateTime2 = new DateTime(time2);

int hours = Hours.hoursBetween(dateTime2, dateTime1).getHours();

int days = hours % 24 == 0 ? hours / 24 : hours / 24 + 1;

System.out.println(days);

joda-time lib有兩次計算天數(shù)的方法,但結果不是你想要的:

Days.daysBetween(dateTime1,dateTime2).getDays()

將給定單位的給定持續(xù)時間轉換為此單位。

從較細粒度到較粗粒度的轉換會截斷,因此會失去精度。例如,將999毫秒轉換為秒會導致0。

https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/TimeUnit.html#convert(long,%20java.util.concurrent.TimeUnit)

我相信他知道這一點,至少在他知道他必須將兩個日期設置為同一時間的意義上。

總結

以上是生活随笔為你收集整理的java timestamp时间差_关于datetime:如何在java中找到2个时间戳之间的日差的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。