看起来转换期间时间会自动更改。
我的输入是output[fullArrayCount] = new char[keysize];
。但是,它会转换为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);
获得的结果是:testDate
答案 0 :(得分:8)
输入中的Z
表示UTC时间,但Convert.ToDateTime
的默认行为是将结果转换为当地时间。如果您查看Convert.ToDateTime("2016-03-30T17:15:25.879Z").Kind
的结果,您会看到Local
。
我建议使用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
然后,您可以根据需要将该值转换为字符串。
当然,我确实建议使用我的Noda Time项目,而您要解析Instant
或{{1}在UTC中知道它... IMO,DateTime
is simply broken,正是由于你一直看到的那种问题。
答案 1 :(得分:6)
当您使用Convert.ToDateTime
(内部使用DateTime.Parse
)Z
(意味着Zulu time)时,此方法会将您当前的时区偏移量添加到该DateTime值。
现在看来您当前的时区是UTC -04:00,这就是为什么方法会返回4小时的结果。
我建议将DateTime.ParseExact
与AdjustToUniversal
和AssumeUniversal
个样式一起用于阻止Kind
转换为Jon answered。
日期和时间以协调世界时(UTC)的形式返回。如果 输入字符串表示通过时区说明符的本地时间 或
AssumeLocal
,日期和时间从当地时间转换为 世界标准时间。 如果输入字符串表示UTC时间,则表示时区 说明符或AssumeUniversal
,不发生转换。如果输入 string不表示本地或UTC时间,不发生转换 生成的Kind
属性为Unspecified
。
答案 2 :(得分:0)
由于CultureInfo.InvariantCulture。 您要在GMT中转换日期
trainers
然后你将它转换为不变文化中的字符串
display
您应该使用DateTime.ParseExact,然后在转换中使用不变文化。