簡體   English   中英

使用 Kotlin 在 Android 上的設備時區中顯示日期/時間

[英]Displaying date/time in devices timezone on Android using Kotlin

所以我的應用程序從服務器的 JSON 文件中獲取信息,其中有一些日期/時間值。 時間和日期采用 UTC。 我需要在我的應用程序中以用戶本地時區顯示這些內容。

來自 JSON 的數據示例:

"start":"2018-10-20 03:00:00","finish":"2018-10-20 05:00:00"

到目前為止,我的代碼以 UTC 格式顯示日期和時間。

val dateStringStart = radioScheduleDMList.get(position).start
        val dateStringEnd = radioScheduleDMList.get(position).finish

        val date = SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault()).parse(dateStringStart)
        val dateEnd = SimpleDateFormat("yyyy-MM-dd hh:mm:ss", Locale.getDefault()).parse(dateStringEnd)
        val day = SimpleDateFormat("d MMM").format(date)
        val startDate = SimpleDateFormat("ha").format(date)
        val endDate = SimpleDateFormat("ha").format(dateEnd)

如何使用設備時區顯示這些數據? 我已經用谷歌搜索了幾個小時。

使用上面的示例,我的應用程序顯示日期為“20 OCT”,時間顯示為“3AM-5AM”。 就我而言,我住在澳大利亞(格林威治標准時間 + 10 點),所以我預計“10 月 20 日”和“下午 1 點至下午 3 點”是一天。 簡而言之,我想檢測用戶與 UTC 的時區偏移量並將其應用於顯示。

java.time 和 ThreeTenABP

    DateTimeFormatter jsonFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d MMM", Locale.forLanguageTag("en-AU"));
    DateTimeFormatter hourFormatter
            = DateTimeFormatter.ofPattern("ha", Locale.forLanguageTag("en-AU"));
    ZoneId zone = ZoneId.systemDefault();

    String dateStringStart = "2018-10-20 03:00:00";

    OffsetDateTime startDateTime = LocalDateTime.parse(dateStringStart, jsonFormatter)
            .atOffset(ZoneOffset.UTC);
    ZonedDateTime userStartDateTime = startDateTime.atZoneSameInstant(zone);
    String startDayString = userStartDateTime.format(dateFormatter);
    String startTimeString = userStartDateTime.format(hourFormatter);
    System.out.println("Start day:  " + startDayString);
    System.out.println("Start hour: " + startTimeString);

對不起,我不會寫 Kotlin。 您可以自己從 Java 翻譯嗎? 當我在具有默認時區澳大利亞/布里斯班的 JVM 上運行上述代碼時,它輸出:

 Start day: 20 Oct Start hour: 1PM

只需對結束日期和時間執行類似操作即可。

問題:我可以在 Android 上使用 java.time 嗎?

是的,java.time 在較舊和較新的 Android 設備上都能很好地工作。 它只需要至少Java 6

  • 在 Java 8 及更高版本和更新的 Android 設備(從 API 級別 26)中,現代 API 是內置的。
  • 在 Java 6 和 7 中獲得 ThreeTen Backport,新類的向后移植(ThreeTen for JSR 310;請參閱底部的鏈接)。
  • 在(較舊的)Android 上使用 ThreeTen Backport 的 Android 版本。 它被稱為 ThreeTenABP。 並確保使用子包從org.threeten.bp導入日期和時間類。

鏈接

暫無
暫無

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

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