在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
,但同样的代码应该适用于LocalDateTime
、OffsetDateTime
或ZonedDateTime
。
如果您打算从 ZonedDateTime
中的时区推断语言环境,我认为您不能可靠地做到这一点。一个时区通常有许多国家,每个国家都有自己的语言环境和格式化日期的方式。例如,德国与挪威、瑞典、丹麦、波兰、法国、瑞士、奥地利和意大利、西班牙、塞尔维亚和许多其他国家共享其时区。
如果您打算从老式 Date
对象中的时区推断它,您当然不能仅仅因为 Date
不包含时区。
【讨论】:
这就是我所需要的,我在 Long 中有日期,在设置默认时区后,我创建了新的 Date(长刻度),但我需要为明确的国家/地区格式化它。如果你有语言环境,你的回答会很好,但我只有时区。 您或许可以做出一些猜测。我认为上述国家/地区的人们将能够阅读使用德国语言环境格式化的日期,即使他们可能并不都认为这是他们自己的。 要将包含自纪元以来的毫秒数的long
转换为可以使用上述代码格式化的内容,请使用Instant.ofEpochMilli(millisSinceEpoch).atZone(ZoneId.of("Europe/Berlin"))
— 请填写您用户的时区而不是柏林时区。这会给你一个ZonedDateTime
,正如我在答案中所说,我的代码应该可以使用它。
您可能想进一步调查一下,是否有一种方法可以获取用户的语言环境,或者有一种方法可以让客户端格式化日期。参见例如jguru.com/faq/view.jsp?EID=12253。
我一定会看看这篇文章。非常感谢!以上是关于在java中按提供的时区格式化日期[重复]的主要内容,如果未能解决你的问题,请参考以下文章