以UTC格式将LocalDateTime转换为LocalDateTime.
LocalDateTime convertToUtc(LocalDateTime date) { //do conversion }
我在网上搜索过.但没有得到解决方案
我个人更喜欢
LocalDateTime.now(ZoneOffset.UTC);
因为它是最易读的选择.
有一种更简单的方法
LocalDateTime.now(Clock.systemUTC())
LocalDateTime不包含区域信息.ZonedDatetime确实如此.
如果要将LocalDateTime转换为UTC,则需要按ZonedDateTime包装.
你可以像下面这样转换.
LocalDateTime ldt = LocalDateTime.now(); System.out.println(ldt.toLocalTime()); ZonedDateTime ldtZoned = ldt.atZone(ZoneId.systemDefault()); ZonedDateTime utcZoned = ldtZoned.withZoneSameInstant(ZoneId.of("UTC")); System.out.println(utcZoned.toLocalTime());
使用以下.它使用本地日期时间并使用时区将其转换为UTC.您不需要创建它的功能.
ZonedDateTime nowUTC = ZonedDateTime.now(ZoneOffset.UTC); System.out.println(nowUTC.toString());
如果需要获取ZonedDateTime的LocalDateTime部分,则可以使用以下内容.
nowUTC.toLocalDateTime();
这是我在我的应用程序中使用的静态方法,用于在mysql中插入UTC时间,因为我无法将默认值UTC_TIMESTAMP添加到datetime列.
public static LocalDateTime getLocalDateTimeInUTC(){ ZonedDateTime nowUTC = ZonedDateTime.now(ZoneOffset.UTC); return nowUTC.toLocalDateTime(); }
这是一个简单的小实用程序类,可用于将本地日期时间从区域转换为区域,包括直接将实时方法从当前区域转换为UTC(使用main方法,以便您可以运行它并查看结果一个简单的测试):
import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZoneOffset; import java.time.ZonedDateTime; public final class DateTimeUtil { private DateTimeUtil() { super(); } public static void main(final String... args) { final LocalDateTime now = LocalDateTime.now(); final LocalDateTime utc = DateTimeUtil.toUtc(now); System.out.println("Now: " + now); System.out.println("UTC: " + utc); } public static LocalDateTime toZone(final LocalDateTime time, final ZoneId fromZone, final ZoneId toZone) { final ZonedDateTime zonedtime = time.atZone(fromZone); final ZonedDateTime converted = zonedtime.withZoneSameInstant(toZone); return converted.toLocalDateTime(); } public static LocalDateTime toZone(final LocalDateTime time, final ZoneId toZone) { return DateTimeUtil.toZone(time, ZoneId.systemDefault(), toZone); } public static LocalDateTime toUtc(final LocalDateTime time, final ZoneId fromZone) { return DateTimeUtil.toZone(time, fromZone, ZoneOffset.UTC); } public static LocalDateTime toUtc(final LocalDateTime time) { return DateTimeUtil.toUtc(time, ZoneId.systemDefault()); } }