java8 获取时间,在Java 8中获取当前时间

I am exploring the new java.time API of Java 8. I am particularly trying to retrieve the current time (my current time zone, of a different time zone, and of a different offset).

The code is:

public static void getCurrentLocalTime(){

LocalTime time = LocalTime.now();

System.out.println("Local Time Zone: "+ZoneId.systemDefault().toString());

System.out.println("Current local time : " + time);

}

public static void getCurrentTimeWithTimeZone(){

LocalDateTime localtDateAndTime = LocalDateTime.now();

ZoneId zoneId = ZoneId.of("America/Los_Angeles");

ZonedDateTime dateAndTimeInLA = ZonedDateTime.of(localtDateAndTime, zoneId);

String currentTimewithTimeZone =dateAndTimeInLA.getHour()+":"+dateAndTimeInLA.getMinute();

System.out.println("Current time in Los Angeles: " + currentTimewithTimeZone);

}

public static void getCurrentTimeWithZoneOffset(){

LocalTime localtTime = LocalTime.now();

ZoneOffset offset = ZoneOffset.of("-08:00");

OffsetTime offsetTime = OffsetTime.of(localtTime, offset);

String currentTimewithZoneOffset =offsetTime.getHour()+":"+offsetTime.getMinute();

System.out.println("Current time with offset -08:00: " + currentTimewithZoneOffset);

}

But, when I call the methods I get the same time-of-day (my system time), which is obviously not what I am expecting.

The output of the method calls:

Current time in Los Angeles: 19:59

Local Time Zone: Asia/Calcutta

Current local time : 19:59:20.477

Current time with offset -08:00: 19:59

Even after setting a different time zone and offset, why am I getting the same time?

解决方案

LocalDateTime.now() always returns the current date/time in your default timezone (say 13 October @ 11.20am in London). When you create a ZonedDateTime or OffsetTime from it with a specific ZoneId or ZoneOffset, you get the same date and time but in a different time zone (for example 13 october at 11.20am in Los Angeles), which represents a different instant in time.

You are probably looking for something like:

Instant now = Instant.now();

ZoneId zoneId = ZoneId.of("America/Los_Angeles");

ZonedDateTime dateAndTimeInLA = ZonedDateTime.ofInstant(now, zoneId);

This will calculate the current date and time in Los Angeles: 13 october, 3.20am.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值