簡體   English   中英

Android 從 GMT 毫秒獲取 UTC 毫秒

[英]Android get UTC milliseconds from GMT milliseconds

我在 GMT 中有時間變量,我將在 UTC 中進行轉換。 我發布我的代碼..

long mytime = 1376824500000;
Date date = new Date(mytime);
String time = new SimpleDateFormat("HH:mm").format(date);

這在某些設備中返回"13:15" ,但我希望始終使用 utc date: "11:15" 我怎樣才能做到這一點? 謝謝你。

不清楚您期望 UTC 和 GMT 之間有什么區別 - 就我們在這里討論的目的而言,它們是等效的。 (它們在技術上並不完全相同,但是......)

格式化方面,您只需要在格式化程序上設置時區:

// TODO: Consider setting a locale explicitly
SimpleDateFormat format = new SimpleDateFormat("HH:mm");
format.setTimeZone(TimeZone.getTimeZone("UTC"));
String time = format.format(date);

試試這個:

long mytime = 1376824500000;
Date date = new Date(mytime);
SimpleDateFormat formater = = new SimpleDateFormat("HH:mm");
formater .setTimeZone(TimeZone.getTimeZone("GMT"));
String time formater.format(date);

時間

java.util Date-Time API 及其格式化 API SimpleDateFormat已過時且容易出錯。 建議完全停止使用它們並切換到現代 Date-Time API *

使用現代日期時間 API java.time解決方案:

import java.time.Instant;
import java.time.LocalTime;
import java.time.OffsetDateTime;
import java.time.OffsetTime;
import java.time.ZoneOffset;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochMilli(1_376_824_500_000L);
        OffsetDateTime odtUtc = instant.atOffset(ZoneOffset.UTC);
        LocalTime time = odtUtc.toLocalTime();
        System.out.println(time);

        // If you want the time with timezone offset
        OffsetTime ot = odtUtc.toOffsetTime();
        System.out.println(ot);
    }
}

輸出:

11:15
11:15Z

在線演示

輸出中的Z是零時區偏移的時區指示符 它代表祖魯語並指定Etc/UTC時區(時區偏移為+00:00小時)。

Trail: Date Time 中了解有關現代日期時間 API 的更多信息。


* 出於任何原因,如果您必須堅持使用 Java 6 或 Java 7,您可以使用ThreeTen-Backport,它將大部分java.time功能向后移植到 Java 6 和 7。如果您正在為 Android 項目和您的 Android API 工作級別仍然不符合 Java-8,請檢查 通過 desugaringHow to use ThreeTenABP in Android Project 可用的 Java 8+ APIs

暫無
暫無

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

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