在java中按提供的时区格式化日期[重复]

Posted

技术标签:

【中文标题】在java中按提供的时区格式化日期[重复]【英文标题】:Format date by provided time zone in java [duplicate] 【发布时间】:2017-11-07 03:39:55 【问题描述】:

我需要在 java 中为提供的时区格式化日期时间。例如。美国为 mm/dd/yyyy,德国为 dd/mm/yyyy。我有时区,我可以得到 zoneId,有人可以帮助我。非常感谢。

【问题讨论】:

尝试用谷歌搜索你的标题。 如果您不提供sscce 与您尝试过的代码,将很难为您提供帮助!!... 去看看这里。 ***.com/questions/7670355/… 也看这里 [Link]***.com/questions/19112357/… 我认为这里的人们误解了这个问题。这与显示给定时区的时间无关。就是根据国家/地区的习惯改变日期格式,从时区推导出国家/地区。 【参考方案1】:

希望对你有帮助,

import java.util.*;
import java.text.*;

public class DateDemo 

   public static void main(String args[]) 

        Date date1 = new Date();
        System.out.println(date1);

        TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
        Date date2 = new Date();
        System.out.println(date2);

        TimeZone.setDefault(TimeZone.getTimeZone("EST"));
        Date date3 = new Date();
        System.out.println(date3);

   

输出:

Tue Jun 06 14:02:51 IST 2017
Tue Jun 06 08:32:51 UTC 2017
Tue Jun 06 03:32:51 EST 2017

【讨论】:

我认为你没有理解这个问题。它是关于根据时区以不同格式显示的。在某些国家/地区,日期格式为 mm-dd-yyyy,在某些国家/地区为 dd/mm/yyyy,等等。【参考方案2】:

对与日期或时间有关的所有内容都使用现代 Java 日期和时间类。

    DateTimeFormatter usFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(Locale.US);
    System.out.println(date.format(usFormatter));
    DateTimeFormatter deFormatter = DateTimeFormatter.ofLocalizedDate(FormatStyle.SHORT)
            .withLocale(Locale.GERMANY);
    System.out.println(date.format(deFormatter));

这将打印类似的东西

6/27/17
27.06.17

这并不完全是您要求的格式,但它是 Java 认为适合这两种语言环境的格式。我会尝试它们,如果用户抱怨,我可以从模式字符串(例如MM/dd/uuuu)构建我自己的DateTimeFormatter

我在代码中为date 使用了LocalDate,但同样的代码应该适用于LocalDateTimeOffsetDateTimeZonedDateTime

如果您打算从 ZonedDateTime 中的时区推断语言环境,我认为您不能可靠地做到这一点。一个时区通常有许多国家,每个国家都有自己的语言环境和格式化日期的方式。例如,德国与挪威、瑞典、丹麦、波兰、法国、瑞士、奥地利和意大利、西班牙、塞尔维亚和许多其他国家共享其时区。

如果您打算从老式 Date 对象中的时区推断它,您当然不能仅仅因为 Date 不包含时区。

【讨论】:

这就是我所需要的,我在 Long 中有日期,在设置默认时区后,我创建了新的 Date(长刻度),但我需要为明确的国家/地区格式化它。如果你有语言环境,你的回答会很好,但我只有时区。 您或许可以做出一些猜测。我认为上述国家/地区的人们将能够阅读使用德国语言环境格式化的日期,即使他们可能并不都认为这是他们自己的。 要将包含自纪元以来的毫秒数的long 转换为可以使用上述代码格式化的内容,请使用Instant.ofEpochMilli(millisSinceEpoch).atZone(ZoneId.of("Europe/Berlin")) — 请填写您用户的时区而不是柏林时区。这会给你一个ZonedDateTime,正如我在答案中所说,我的代码应该可以使用它。 您可能想进一步调查一下,是否有一种方法可以获取用户的语言环境,或者有一种方法可以让客户端格式化日期。参见例如jguru.com/faq/view.jsp?EID=12253。 我一定会看看这篇文章。非常感谢!

以上是关于在java中按提供的时区格式化日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章

需要当前日期在具有日期格式的“UTC”时区[重复]

如何在Javascript中将日期转换为其他时区[重复]

从时区偏移或Angularjs中的日期获取时区[重复]

根据时区自定义格式的javascript日期时间[重复]

熊猫日期时间格式删除时区[重复]

针对当前时区调整的不同夏令时的UTC日期[重复]