java 获取时区的时间_如何使用Java获取时区的当前日期和时间?

如何使用Java获取时区的当前日期和时间?

我的应用托管在伦敦服务器中。 我在西班牙马德里。 因此,时区为-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();

10个解决方案

88 votes

java.time.ZonedDateTime始终基于UTC ...或时区中立,具体取决于您要如何查看。 java.time.ZonedDateTime仅代表一个时间点; 它独立于时区,距离Unix时代仅几毫秒。 没有“ DateTime的本地实例”的概念。 将Date与27413176823007160160和/或java.time.ZonedDateTime结合使用以使用“本地”时区。 使用TimeZone.getTimeZone("Europe/Madrid")获取马德里时区。

...或使用Joda Time,这会使整个事情变得更加清晰,IMO。 在“乔达时间”中,您将使用java.time.ZonedDateTime值,该值是特定日历系统和时区中的即时时间。

在Java 8中,您将使用java.time.ZonedDateTime,这与Joda Time的DateTime在Java 8中等效。

Jon Skeet answered 2020-02-10T11:09:41Z

52 votes

正如乔恩·斯基特(Jon Skeet)所说,SimpleDateFormat没有时区。 DateFormat对象表示自UTC 1970年1月1日上午12:00开始的毫秒数。 它不包含时区信息。

当您将日期对象格式化为字符串时(例如,使用2741318187187177477120),则可以在DateFormat对象上设置时区,以使其知道要在哪个时区中显示日期和时间:

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());

Jesper answered 2020-02-10T11:10:11Z

16 votes

使用日历很简单:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("Europe/Madrid"));

Date currentDate = calendar.getTime();

dfa answered 2020-02-10T11:10:31Z

9 votes

使用Java 8和更高版本中内置的java.time类:

public static void main(String[] args) {

LocalDateTime localNow = LocalDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());

System.out.println(localNow);

// Prints current time of given zone without zone information : 2016-04-28T15:41:17.611

ZonedDateTime zoneNow = ZonedDateTime.now(TimeZone.getTimeZone("Europe/Madrid").toZoneId());

System.out.println(zoneNow);

// Prints current time of given zone with zone information : 2016-04-28T15:41:17.627+02:00[Europe/Madrid]

}

Zeeshan answered 2020-02-10T11:10:51Z

3 votes

检查这可能会有所帮助。 对我来说很好。 该代码还涵盖了夏令时

TimeZone tz = TimeZone.getTimeZone("Asia/Shanghai");

Calendar cal = Calendar.getInstance();

// If needed in hours rather than milliseconds

int LocalOffSethrs = (int) ((cal.getTimeZone().getRawOffset()) *(2.77777778 /10000000));

int ChinaOffSethrs = (int) ((tz.getRawOffset()) *(2.77777778 /10000000));

int dts = cal.getTimeZone().getDSTSavings();

System.out.println("Local Time Zone : " + cal.getTimeZone().getDisplayName());

System.out.println("Local Day Light Time Saving : " + dts);

System.out.println("China Time : " + tz.getRawOffset());

System.out.println("Local Offset Time from GMT: " + LocalOffSethrs);

System.out.println("China Offset Time from GMT: " + ChinaOffSethrs);

// Adjust to GMT

cal.add(Calendar.MILLISECOND,-(cal.getTimeZone().getRawOffset()));

// Adjust to Daylight Savings

cal.add(Calendar.MILLISECOND, - cal.getTimeZone().getDSTSavings());

// Adjust to Offset

cal.add(Calendar.MILLISECOND, tz.getRawOffset());

Date dt = new Date(cal.getTimeInMillis());

System.out.println("After adjusting offset Acctual China Time :" + dt);

Subhamay answered 2020-02-10T11:11:11Z

2 votes

您将为此使用JodaTime。 关于TimeZone,Java.util.Date非常受限制。

Joshua Partogi answered 2020-02-10T11:11:31Z

1 votes

我无法使用日历来工作。 您必须使用DateFormat

//Wednesday, July 20, 2011 3:54:44 PM PDT

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

df.setTimeZone(TimeZone.getTimeZone("PST"));

final String dateTimeString = df.format(new Date());

//Wednesday, July 20, 2011

df = DateFormat.getDateInstance(DateFormat.FULL);

df.setTimeZone(TimeZone.getTimeZone("PST"));

final String dateString = df.format(new Date());

//3:54:44 PM PDT

df = DateFormat.getTimeInstance(DateFormat.FULL);

df.setTimeZone(Timezone.getTimeZone("PST"));

final String timeString = df.format(new Date());

wjin answered 2020-02-10T11:11:51Z

0 votes

这是一个例子:

Calendar c = Calendar.getInstance(TimeZone.getDefault());

Date date = c.getTime();

Martijn Courteaux answered 2020-02-10T11:12:10Z

0 votes

以下是为您的区域找到时间的一些步骤:

现在的日期=新的Date();

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

df.setTimeZone(TimeZone.getTimeZone("Europe/London"));

System.out.println("timeZone.......-->>>>>>"+df.format(now));

shan answered 2020-02-10T11:12:35Z

-2 votes

DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);

df.setTimeZone(TimeZone.getTimeZone("PST"));

final String dateTimeString = df.format(new Date());

shamim answered 2020-02-10T11:12:50Z

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值