Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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.ToString()未转换时间_C#_.net_Datetime_Type Conversion - Fatal编程技术网

C# DateTime.ToString()未转换时间

C# DateTime.ToString()未转换时间,c#,.net,datetime,type-conversion,C#,.net,Datetime,Type Conversion,看起来时间在转换过程中会自动更改。 我的输入是17:15:25。但是,它被转换为13:15:25 原因可能是什么 string testDate = Convert.ToDateTime("2016-03-24T17:15:25.879Z") .ToString("dd-MMM-yyyy HH:mm:ss", CultureInfo.InvariantCulture); 当您使用Convert.ToDateTime(使用DateTime.Par

看起来时间在转换过程中会自动更改。 我的输入是17:15:25。但是,它被转换为13:15:25 原因可能是什么

string testDate = Convert.ToDateTime("2016-03-24T17:15:25.879Z")
                         .ToString("dd-MMM-yyyy HH:mm:ss", CultureInfo.InvariantCulture);
当您使用Convert.ToDateTime(使用DateTime.Parse)时,我得到的testDate结果是:24-Mar-2016 13:15:25,这意味着此方法将当前时区偏移量添加到该日期时间值

看起来您当前的时区现在是UTC-04:00,这就是为什么方法返回4小时的结果

我建议将DateTime.ParseExact与AdjustToUniversal和AssumeUniversal样式一起使用,以防止转换为

日期和时间作为协调世界时UTC返回。如果 输入字符串通过时区说明符表示本地时间 或假定为本地,则日期和时间从本地时间转换为 UTC。如果输入字符串表示UTC时间,则通过时区 说明符或AssumeUniversal,不会发生转换。如果输入 字符串不表示本地或UTC时间,不会发生转换,并且 未指定结果种类属性

当您使用Convert.ToDateTime(使用DateTime.Parse)时,该方法会将当前时区偏移量添加到该DateTime值

看起来您当前的时区现在是UTC-04:00,这就是为什么方法返回4小时的结果

我建议将DateTime.ParseExact与AdjustToUniversal和AssumeUniversal样式一起使用,以防止转换为

日期和时间作为协调世界时UTC返回。如果 输入字符串通过时区说明符表示本地时间 或假定为本地,则日期和时间从本地时间转换为 UTC。如果输入字符串表示UTC时间,则通过时区 说明符或AssumeUniversal,不会发生转换。如果输入 字符串不表示本地或UTC时间,不会发生转换,并且 未指定结果种类属性


因为CultureInfo.InvariantCulture。 您正在转换GMT中的日期

Convert.ToDateTime("2016-03-24T17:15:25.879Z")
然后在一个不变的区域性中将其转换为字符串

ToString("dd-MMM-yyyy HH:mm:ss",CultureInfo.InvariantCulture);

您应该使用DateTime.ParseExact,然后在转换中使用不变区域性。

因为CultureInfo.InvariantCulture。 您正在转换GMT中的日期

Convert.ToDateTime("2016-03-24T17:15:25.879Z")
然后在一个不变的区域性中将其转换为字符串

ToString("dd-MMM-yyyy HH:mm:ss",CultureInfo.InvariantCulture);
您应该使用DateTime.ParseExact,然后在转换中使用不变区域性。

输入中的Z表示UTC时间,但Convert.ToDateTime的默认行为是将结果转换为本地时间。如果你看Convert.ToDateTime2016-03-30T17:15:25.879Z.Kind的结果,你会发现它是本地的

我建议使用DateTime.ParseExact,您可以在其中指定所需的确切行为,例如保留UTC时间:

var dateTime = DateTime.ParseExact(
    "2016-03-30T17:15:25.879Z",
    "yyyy-MM-dd'T'HH:mm:ss.FFF'Z'",
    CultureInfo.InvariantCulture,
    DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
Console.WriteLine(dateTime);      // March 30 2016 17:15 (...)
Console.WriteLine(dateTime.Kind); // Utc
然后,您可以根据需要将该值转换为字符串

当然,我真的建议用我的项目来代替,在这里你可以解析到一个瞬间或者一个分区的DateTime,这样你就知道它是UTC格式的。。。依我看,正是由于您所看到的问题。

输入中的Z表示UTC时间,但Convert.ToDateTime的默认行为是将结果转换为本地时间。如果你看Convert.ToDateTime2016-03-30T17:15:25.879Z.Kind的结果,你会发现它是本地的

我建议使用DateTime.ParseExact,您可以在其中指定所需的确切行为,例如保留UTC时间:

var dateTime = DateTime.ParseExact(
    "2016-03-30T17:15:25.879Z",
    "yyyy-MM-dd'T'HH:mm:ss.FFF'Z'",
    CultureInfo.InvariantCulture,
    DateTimeStyles.AdjustToUniversal | DateTimeStyles.AssumeUniversal);
Console.WriteLine(dateTime);      // March 30 2016 17:15 (...)
Console.WriteLine(dateTime.Kind); // Utc
然后,您可以根据需要将该值转换为字符串


当然,我真的建议用我的项目来代替,在这里你可以解析到一个瞬间或者一个分区的DateTime,这样你就知道它是UTC格式的。。。在我看来,这正是由于您所看到的问题。

您是否检查了生成的日期时间是否正确?Convert.ToDateTime2016-03-24T17:15:25.879Z的值?如果这是不正确的,那是因为您当前的语言环境设置。您是否检查了生成的日期时间是否正确?Convert.ToDateTime2016-03-24T17:15:25.879Z的值?如果这是不正确的,那是因为您当前的区域设置。我相信您的意思是UTC-04:00@IanUps,固定。谢谢:太好了,没问题。回答得好@索纳,谢谢你,修好了。@Richard很乐意帮忙。我相信你的意思是UTC-04:00@IanUps,固定。谢谢:太好了,没问题。回答得好@“索纳,谢谢你,修好了。”理查德很乐意帮忙。