C# DateTime ConvertTimeBySystemTimeZoneId为';行不通
我将时间保存到数据库中的UTC 当从数据库中获取时间数据时,我想将时间转换为本地时区 这里是函数C# DateTime ConvertTimeBySystemTimeZoneId为';行不通,c#,datetime,timezone,C#,Datetime,Timezone,我将时间保存到数据库中的UTC 当从数据库中获取时间数据时,我想将时间转换为本地时区 这里是函数 public static List<string> convertListDateTime(List<string> timelist, TimeZoneInfo local) { for (int i = 0; i < timelist.Count; i++) { DateTime dt = D
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;
}
公共静态列表convertListDateTime(列表时间列表,TimeZoneInfo本地)
{
for(int i=0;i
timelist是包含数据库数据的字符串列表
但时间主义者不是改变。它与数据库数据相同
我该怎么办?这是第一个问题:
DateTime dt = DateTime.Parse(timelist[i]);
您没有说过该值以UTC为单位,因此假定它以本地时间为单位。从该时间到本地时间的转换是不可操作的。在解析时,您可以说输入是UTC,并且您希望输出也是UTC:
DateTime dt = DateTime.ParseExact(
timelist[i],
"yyyy-MM-dd HH:mm:ss",
CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal);
但是,第二,无论如何,您都应该尽量避免所有这些字符串转换:如果您将值存储在数据库中,作为DateTime
值而不是字符串,这将使事情变得容易得多
我也会尽可能使用DateTime
值作为值-仅在绝对必要时转换为字符串,理想情况下不作为同时执行时区更改的操作的一部分
最后,如果您已经获得了一个TimeZoneInfo
,您可以直接使用它,而不是使用ConvertTimeBySystemTimeZoneId
:
DateTime convertedValue = TimeZoneInfo.ConvertTimeFromUtc(utcValue, zoneInfo);
我的第一个建议是将datetime数据存储为数据库中的datatime数据(不是字符串)