Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# DateTime ConvertTimeBySystemTimeZoneId为';行不通_C#_Datetime_Timezone - Fatal编程技术网

C# DateTime ConvertTimeBySystemTimeZoneId为';行不通

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

我将时间保存到数据库中的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;
    }
公共静态列表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数据(不是字符串)