簡體   English   中英

Java-獲得一致的UTC值,與服務器無關

[英]Java - getting consistent UTC values irrespective of server

我正在開發一種產品版本,該版本將由印度的用戶使用,並且正在印度(格林尼治標准時間+5:30)工作。 我們的服務器在美國。 將應用一些具有開始日期和結束日期的方案(例如-從8月1日00:00:00到8月31日11:59:59,它必須處於活動狀態)。 我正在使用http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/,因為我使用此代碼是假設getTime將具有一致的UTC時間,

// dateStr is what user enters on UI like 1/08/2013 format = dd/MM/yyyy
public static long getUTCDateWithFormat(String dateStr, String format) throws ParseException {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    Date date = sdf.parse(dateStr);
    return date.getTime();
}

因此,考慮開始時間,當我從本地主機運行時,對於8月1日,我得到的結果= 1375295400000,這意味着2013年8月1日,星期四GMT + 0530(印度標准時間)。 (因此,我知道要從UTC中減去5小時30分鍾毫秒,因為在運行時我必須將系統時間與此值進行比較。)

從服務器(美國)運行時,預計會保存類似的UTC,但它節省了1375336800000,這意味着2013年8月1日星期四GMT + 0530(印度標准時間),因此UTC時間有所不同,並且存在11:30小時的漏洞除了5:30小時的缺陷。

未在服務器上使用以下代碼,但我希望得到類似的結果-

Calendar calendar = Calendar.getInstance();
String[] arr = dateStr.split("/");
calendar.set(new Integer(arr[2]), new Integer(arr[0]), new Integer(
        arr[1]));
return calendar.getTime();

請幫助我解決這個問題。 另外,在運行時進行比較時,我必須使用new Date(),那應該怎么辦?

java.util.Date有很多問題,應避免。 您應該改用java.util.Calendar,並且可能使用特定的日歷java.util.GregorianCalendar。 日歷在一致性方面表現得更好,並且與操作系統功能/細節無關。

因此,開始使用公歷

問題是否就是您要同時在服務器和客戶端上看到當前時間(以UTC毫秒為單位)的事實? 如果是這種情況,則調用System.currentTimeMillis()應該返回相同的值(如果同時調用,則在美國和印度)。

如果不是那樣,也許您可​​能想要將時區傳遞給GregorianCalendar,如下所示:

GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific"))

如果問題仍然存在,也許您可​​以詳細說明問題?

暫無
暫無

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

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