如何在Java中获取您所在时区的当前日期和时间?

2022-08-31 14:05:08

我的应用程序托管在伦敦服务器中。我在西班牙马德里。所以时区是-2小时。

如何获取当前日期/时间以及我的时区。

Date curr_date = new Date(System.currentTimeMillis());

例如:

Date curr_date = new Date(System.currentTimeMillis("MAD_TIMEZONE"));

Joda-Time

DateTimeZone zone = DateTimeZone.forID("Europe/Madrid");
DateTime dt = new DateTime(zone);
int day = dt.getDayOfMonth();
int year = dt.getYear();
int month = dt.getMonthOfYear();
int hours = dt.getHourOfDay();
int minutes = dt.getMinuteOfHour();

答案 1

日期始终基于 UTC...或时区中性,具体取决于您想要如何查看它。A 表示时间点;它独立于时区,距离Unix时代只有几毫秒。没有“的本地实例”的概念。与“日历”和/或“时区”结合使用,获取默认值() 以使用“本地”时区。用于获取马德里时区。DateDateDateTimeZone.getTimeZone("Europe/Madrid")

...或者使用Joda Time,它往往会使整个事情更清晰,IMO。在Joda Time中,您将使用一个值,该值是特定日历系统和时区中的时间瞬间。DateTime

在Java 8中,你会使用,这是Java 8相当于Joda Time的。java.time.ZonedDateTimeDateTime


答案 2

正如Jon Skeet已经说过的那样,没有时区。对象表示自 1970 年 1 月 1 日上午 12:00(UTC)以来的毫秒数。它不包含时区信息。java.util.DateDate

将 Date 对象的格式设置为字符串时(例如,通过使用 ),则可以在对象上设置时区,以使其知道要在哪个时区显示日期和时间:SimpleDateFormatDateFormat

Date date = new Date();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

// Use Madrid's time zone to format the date in
df.setTimeZone(TimeZone.getTimeZone("Europe/Madrid"));

System.out.println("Date and time in Madrid: " + df.format(date));

如果需要运行程序的计算机的本地时区,请使用:

df.setTimeZone(TimeZone.getDefault());

推荐