我需要在java中为提供的时区格式化日期时间。例如。美国为mm / dd / yyyy,DE为dd / mm / yyyy。我有时区,我可以获得zoneId,有人可以帮我。非常感谢。
答案 0 :(得分:1)
使用现代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认为适合这两种语言环境的格式。我会尝试使用它们,如果用户投诉,请从模式字符串(例如DateTimeFormatter
)构建我自己的MM/dd/uuuu
。
我在代码中使用LocalDate
date
,但相同的代码应与LocalDateTime
,OffsetDateTime
或ZonedDateTime
一起使用。
如果您打算在ZonedDateTime
中推断时区的区域设置,我认为您无法可靠地执行此操作。时区中经常有许多国家/地区,每个国家/地区都有自己的区域设置和自己的格式化日期方式。例如,德国与挪威,瑞典,丹麦,波兰,法国,瑞士,奥地利和意大利,西班牙,塞尔维亚和其他许多国家分享其时区。
如果您打算在旧式Date
对象中从时区推断出它,那么您当然不能简单地因为Date
没有时区。
答案 1 :(得分:0)
希望这会对你有所帮助,
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