gpt4 book ai didi

java - 如何将本地时间转换为 UTC,同时牢记 DayLightSaving 因素

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:19:50 26 4
gpt4 key购买 nike

在我的 Web 应用程序中,我将所有最终用户的日期信息以 UTC 格式存储在数据库中,在向他们显示之前,只需将 UTC 日期转换为他们选择的时区。

我正在使用此方法将本地时间转换为 UTC 时间(在存储时):

public static Date getUTCDateFromStringAndTimezone(String inputDate, TimeZone timezone){
Date date
date = new Date(inputDate)

print("input local date ---> " + date);

//Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
long msFromEpochGmt = date.getTime()

//gives you the current offset in ms from GMT at the current date
int offsetFromUTC = timezone.getOffset(msFromEpochGmt)*(-1) //this (-1) forces addition or subtraction whatever is reqd to make UTC
print("offsetFromUTC ---> " + offsetFromUTC)

//create a new calendar in GMT timezone, set to this date and add the offset
Calendar gmtCal = Calendar.getInstance(TimeZone.getTimeZone("GMT"))
gmtCal.setTime(date)
gmtCal.add(Calendar.MILLISECOND, offsetFromUTC)

return gmtCal.getTime()
}

以及这种将 UTC 日期转换为本地日期(同时显示)的方法:

public static String getLocalDateFromUTCDateAndTimezone(Date utcDate, TimeZone timezone, DateFormat formatter) {
printf ("input utc date ---> " + utcDate)

//Returns the number of milliseconds since January 1, 1970, 00:00:00 GMT
long msFromEpochGmt = utcDate.getTime()

//gives you the current offset in ms from GMT at the current date
int offsetFromUTC = timezone.getOffset(msFromEpochGmt)
print("offsetFromUTC ---> " + offsetFromUTC)

//create a new calendar in GMT timezone, set to this date and add the offset
Calendar localCal = Calendar.getInstance(timezone)
localCal.setTime(utcDate)
localCal.add(Calendar.MILLISECOND, offsetFromUTC)

return formatter.format(localCal.getTime())
}

我的问题是,如果最终用户在 DST 区内,那么我该如何改进方法以完美适应他们的本地时钟时间。

最佳答案

如果您使用自定义时区 ID,例如 GMT+10,您将获得不支持 DST 的时区,例如 TimeZone.getTimeZone("GMT+10").useDaylightTime() 返回 false .但是如果您使用受支持的 ID,例如“America/Chicago”,您将获得一个支持 DST 的时区。 TimeZone.getAvailableIDs() 返回支持的 ID 的完整列表。 Java 在内部将时区信息存储在 jre/lib/zi 中。

关于java - 如何将本地时间转换为 UTC,同时牢记 DayLightSaving 因素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13948559/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com