亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在末尾沒有時區的情況下將日期時間顯示為當地時間?

如何在末尾沒有時區的情況下將日期時間顯示為當地時間?

溫溫醬 2023-03-17 16:04:56
編輯:由于有些看似混亂,讓我澄清一下。如果可能的話,我希望解決方案在 freemarker 中而不是在 java 中完成。我有一個看起來像這樣的日期時間字符串:2019-03-12T16:02:00+02:00 我必須以這樣的特定格式顯示它:EEEE dd. MMMM yyyy HH:mm 但是,如果我這樣做,它會顯示時間而14:02不是16:02. 它將日期時間轉換為 UTC,然后顯示它。我如何讓它按原樣顯示小時和分鐘,只是最后沒有“utc”?或者與此相關的任何時區。 Tuesday 12. March 2019 16:02是所需的輸出。我不知道收件人的時區。使用iso_local_nz給我的美國標準顯示仍然是錯誤的。先感謝您。我已經嘗試了幾乎所有我能從這里想到的: https: //freemarker.apache.org/docs/ref_builtins_date.html#ref_builtin_date_iso。departureScheduled?datetime.iso?string("EEEE dd. MMMM yyyy HH:mmz")?capitalize我使用的配置如下:config = new Configuration(Configuration.VERSION_2_3_28);config.setTemplateLoader(new S3TemplateLoader());config.setDefaultEncoding("UTF-8");config.setLocalizedLookup(false);config.setLocale(Locale.forLanguageTag("NO"));config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);輸入的字符串是我上面提供的字符串。
查看完整描述

3 回答

?
catspeake

TA貢獻1111條經驗 獲得超0個贊

到目前為止,這不是一個好的解決方案,但它適用于我遇到的一種情況,即我要顯示的時間在解析之前位于原始字符串中。

departureScheduled?keep_before("+")?datetime.iso?string("EEEE dd. MMMM yyyy HH:mm")?capitalize

注意keep_before("+").

+上面的解決方案通過刪除in之后的任何內容來工作2019-03-12T16:02:00+02:00。然后,日期時間解析器假定時間為 UTC。因此,我通過使用一個內置的字符串操作函數來避免整個問題,該函數返回不會被進一步修改的子字符串:2019-03-12T16:02:00(+00:00)。括號顯示了它是如何被解釋的。

如果有人有更好的答案,我會將其標記為正確,但幾天后,如果沒有給出答案,我會將其標記為正確,以供可能遇到相同問題的任何人使用。



查看完整回答
反對 回復 2023-03-17
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

使用該類java.time.OffsetDateTime來處理偏移量:


public static void main(String[] args) {

    String t = "2019-03-12T16:02:00+02:00";

    OffsetDateTime odt = OffsetDateTime.parse(t);

    System.out.println(odt.format(DateTimeFormatter.ofPattern("EEEE dd. MMMM yyyy HH:mm")));

}

此打印Dienstag 12. M?rz 2019 16:02,翻譯取決于您的系統默認值Locale。


請注意,正確的代碼不會產生您想要的輸出,因為 2019 年 3 月 12 日是星期二而不是星期一。


查看完整回答
反對 回復 2023-03-17
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

上面的答案都不適用于實際實現,所以我做了一些實驗,這很完美(在 Java 中):


ZoneId userTimezone = ZoneId.of("Europe/Rome"); // To provide as parameter

DateTimeFormatter formatter = DateTimeFormatter

    .ofPattern("dd/MM/yyyy HH:mm")

    .withZone(userTimezone);


String formattedDateTime = <any instance of ZonedDateTime>

            .format(formatter);

// OR

String formattedDateTime = <any instance of LocalDateTime> // JVM with UTC time

            .atZone(ZoneId.of("UTC")) // Adds timezone info <- Very important

            .format(formatter);       // Transforms the time at the desired zone

該字符串現在可用于該時區用戶將看到的任何模板/電子郵件。


UTC Value: 20/03/2022 10:00

Output:    20/03/2022 11:00 // Without the timezone at the end


查看完整回答
反對 回復 2023-03-17
  • 3 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號