按java中提供的时区格式化日期

时间:2017-06-06 08:08:54

标签: java date timezone format

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

2 个答案:

答案 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,但相同的代码应与LocalDateTimeOffsetDateTimeZonedDateTime一起使用。

如果您打算在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