2016-12-09 202 views
1

我當前在MILLISECONDS我的設備中的時間。時間對話毫秒本地時間到毫秒UTC時間在Android中

現在我需要把它轉換成UTC時區

所以我嘗試這個毫秒,但它不是在毫秒轉換。

public static long localToUTC(long time) { 
    try { 
     SimpleDateFormat sdf = new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a"); 
     sdf.setTimeZone(TimeZone.getTimeZone("UTC")); 
     Log.e("* UTC : " + time, " - " + sdf.format(new Date(time))); 
     Date date = sdf.parse(sdf.format(new Date(time))); 
     long timeInMilliseconds = date.getTime(); 
     Log.e("Millis in UTC", timeInMilliseconds + "" + new SimpleDateFormat("MMM dd, yyyy hh:mm:ss a").format(date)); 
     return timeInMilliseconds; 
    } catch (Exception e) { 
     Log.e("Exception", "" + e.getMessage()); 
    } 
    return time; 
} 

,反之亦然同爲UTC MILLISECOND本地時區MILLISECOND

請給我一些建議。

+0

代碼看起來沒什麼問題。你確定你正確地測試了嗎?可能是您可以添加示例輸入和預期輸出。 – Veeram

+0

謝謝,我測試了它,它給了我正確的日期,但是當我從日期對象中取毫秒時間long timeInMilliseconds = date.getTime();它給了我一些價值,這是不準確的,我需要 –

回答

0

對於局部於UTC毫秒,反之亦然

本地UTC

public static long localToUTC(long time) { 
     try { 
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); 
      Date date = new Date(time); 
      dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); 
      String strDate = dateFormat.format(date); 
//   System.out.println("Local Millis * " + date.getTime() + " ---UTC time " + strDate);//correct 

      SimpleDateFormat dateFormatLocal = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss"); 
      Date utcDate = dateFormatLocal.parse(strDate); 
//   System.out.println("UTC Millis * " + utcDate.getTime() + " ------ " + dateFormatLocal.format(utcDate)); 
      long utcMillis = utcDate.getTime(); 
      return utcMillis; 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return time; 
    } 

UTC TO LOCAL

public static long utcToLocal(long utcTime) { 
     try { 
      Time timeFormat = new Time(); 
      timeFormat.set(utcTime + TimeZone.getDefault().getOffset(utcTime)); 
      return timeFormat.toMillis(true); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return utcTime; 
    } 

謝謝,我得到了這個解決方案

+0

此代碼無法將UTC轉換爲本地時間。 –

0

關於你的代碼的一些意見:

  • 您格式設置爲UTC,所以你interprete時間參數爲UTC,而不是「本地毫秒」,如完成:sdf.format(new Date(time)));

  • Date date = sdf.parse(sdf.format(new Date(time)));沒有任何意義。你可以在不需要格式化和解析的情況下編寫:Date date = new Date(time);

我不知道你從哪裏得到時間參數。但是你聲明這被解釋爲「本地毫秒」似乎是基於一種誤解。在UTC時間線上處理全球有效時刻/時刻的時,測量即時時間(拋開時鐘故障)並不重要。因此,時間參數可能通過System.currentTimeMillis()等被測量爲設備時間,但您可以直接將其與任何其他時刻(即使在其他設備上)進行比較,而無需進行轉換。如果你真的真的有「本地毫秒」(不應該在專門的時區庫之外公開處理),那麼你需要一個時區偏移來處理轉換,否則它是任意猜測。對於這種轉換式將是僞代碼:

[UTC時間] = [本地時間]零下[區偏移]

+0

謝謝,我有解決方案,使一些錯誤解決。 –