簡體   English   中英

如何在不同時區找到兩個日期之間的差異,以秒為單位

[英]How to find difference between two dates in seconds in different timezones

我有一段代碼可以找到兩個日期之間的區別(格式為yyyy-MM-dd hh:mm:ss)。 此代碼在全球多個服務器中運行。 兩個日期中的一個是正在運行代碼的特定時區的當前時間(服務器時間),另一個是從數據庫獲得的時間。 如果這兩次之間的差異大於86400秒(1天),則應打印“無效”,否則應打印“有效”。 面對代碼的問題是當我在我的本地運行時,它工作正常,但是當我將它部署到美國的服務器上時,它考慮了GMT時間而不是本地時間。 無論代碼運行在哪里,我都希望從數據庫中獲取當前時間和時間之間的差異,如果它大於86400秒,我想打印無效。 如何在java中實現這一點? PS:我試過Date對象,但它只考慮GMT到處都是。

我會在任何地方使用GMT,只轉換到當地時間用於顯示目的。

要找到差異,請將兩個時間轉換為相同的時區(比如GMT)並采取差異。

您可以通過以下示例代碼執行此操作。

Date date = new Date();

DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setTimeZone(TimeZone.getTimeZone("CET"));

Date date1 = dateformat.parse(formatter.format(date));

// Set the formatter to use a different timezone
formatter.setTimeZone(TimeZone.getTimeZone("IST"));

Date date2 = dateformat.parse(formatter.format(date)); 
// Prints the date in the IST timezone
//    System.out.println(formatter.format(date));

現在將date1與date2進行比較

首先,我同意Peter Lawrey在那里的回答。 通常,將所有時間存儲在單個區域的數據庫中,並根據用戶的區域設置為用戶呈現偏移量是一種好習慣。

要找到差異,請使用方法getTime()從每個日期的紀元獲取時間(以毫秒為單位)。 1天差異的計算則為86400 * 1000毫秒。 或者,也許,將時間以毫秒為單位存儲在數據庫中的紀元中,並在檢索時使用數據庫過程/函數。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM