我将时间保存到数据库中的UTC。
当我从数据库中获取时间数据时,我想将时间转换为本地时区。
这是功能。
public static List<string> convertListDateTime(List<string> timelist, TimeZoneInfo local)
{
for (int i = 0; i < timelist.Count; i++)
{
DateTime dt = DateTime.Parse(timelist[i]);
dt = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dt, local.Id);
timelist[i] = dt.ToString("yyyy-MM-dd HH:mm:ss");
}
return timelist;
}
timelist是具有数据库数据的字符串列表。
但是时间表不会改变。它与数据库数据相同。
我该怎么办?
答案 0 :(得分:3)
这是第一个问题:
DateTime dt = DateTime.Parse(timelist[i]);
您尚未说过的值是 ,因此假定它是本地时间。从该时间转换为当地时间是无人值守的。您可以在解析时通过说输入为UTC且您也希望输出也为UTC来解决此问题:
DateTime dt = DateTime.ParseExact(
timelist[i],
"yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
但是,第二,无论如何,您都应该尝试避免所有这些字符串转换:如果将值作为DateTime
值而不是字符串存储在数据库中,那么事情就容易很多了。
我也会尽量使用值 as DateTime
的值-仅在绝对必要时才转换为字符串,理想情况下不作为同时执行时区更改的操作的一部分。
最后,如果您已经拥有ConvertTimeBySystemTimeZoneId
,则可以直接使用它,而不是使用TimeZoneInfo
:
DateTime convertedValue = TimeZoneInfo.ConvertTimeFromUtc(utcValue, zoneInfo);