Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/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# DateTimeOffset,不清楚_C#_Date_Datetime_Datetimeoffset - Fatal编程技术网

C# DateTimeOffset,不清楚

C# DateTimeOffset,不清楚,c#,date,datetime,datetimeoffset,C#,Date,Datetime,Datetimeoffset,我读了一篇关于DateTimeOffset、属性DateTime的文档 DateTime属性不受偏移量值的影响 财产。此属性返回日期和时间组件 DateTimeOffset对象的,这使它对执行 DateTimeOffset到DateTime的转换。例如,如果 DateTimeOffset对象的日期和时间值为“1/12/07 4:01pm+ 7:30”,物业返回的日期为“2007年12月1日下午4:01” 我有+2 GMT时区,请尝试以下代码: var dateString = "201

我读了一篇关于DateTimeOffset、属性DateTime的文档

DateTime属性不受偏移量值的影响 财产。此属性返回日期和时间组件 DateTimeOffset对象的,这使它对执行 DateTimeOffset到DateTime的转换。例如,如果 DateTimeOffset对象的日期和时间值为“1/12/07 4:01pm+ 7:30”,物业返回的日期为“2007年12月1日下午4:01”

我有+2 GMT时区,请尝试以下代码:

    var dateString = "2012-03-01 00:00:00-23:00";
    var birthDay = DateTime.Parse(dateString);
    DateTimeOffset dtOffset = new DateTimeOffset(birthDay);

然后我查看dtOffset对象的属性DateTime,并查看{3/2/2012 1:00:00 AM}值。UtcDateTime具有{3/1/2012 11:00:00 PM}值,LocalDateTime具有{3/2/2012 1:00:00 AM}值。因此,DateTimeOffset实例的属性DateTime具有带偏移量的DateTime。我错在哪里?

DateTimeOffset实际上应该称为ADateTimeWithAnOffset,因为它有两个属性——您提供的日期时间和偏移量。这使得它对于转换非常有用,但本身不会转换任何内容

…DateTimeOffset结构包括一个DateTime值,以及一个Offset属性,该属性定义当前DateTimeOffset实例的日期和时间与协调世界时(UTC)之间的差异

您的时间很有趣,不是因为DateTimeOffset,而是因为您的初始字符串格式。一旦将偏移量添加到字符串的发送中,在创建基础日期时间时,它也会考虑本地时间偏移量。在我的时区,也就是UCT-5,这就是发生的事情

Console.WriteLine(DateTime.Parse( "2012-03-01"));
3/1/2012 12:00:00 AM

Console.WriteLine(DateTime.Parse("2012-03-01  00:00:00-23:00"));
3/1/2012 6:00:00 PM

如果您检查基础DateTime上的Kind属性,只要您从带有偏移量的字符串创建它,就会发现它是本地的。

DateTimeOffset实际上应该称为ADateTimeWithAnOffset,因为它有两个属性——您提供的DateTime和偏移量。这使得它对于转换非常有用,但本身不会转换任何内容

…DateTimeOffset结构包括一个DateTime值,以及一个Offset属性,该属性定义当前DateTimeOffset实例的日期和时间与协调世界时(UTC)之间的差异

您的时间很有趣,不是因为DateTimeOffset,而是因为您的初始字符串格式。一旦将偏移量添加到字符串的发送中,在创建基础日期时间时,它也会考虑本地时间偏移量。在我的时区,也就是UCT-5,这就是发生的事情

Console.WriteLine(DateTime.Parse( "2012-03-01"));
3/1/2012 12:00:00 AM

Console.WriteLine(DateTime.Parse("2012-03-01  00:00:00-23:00"));
3/1/2012 6:00:00 PM

如果您检查基础DateTime上的Kind属性,您将看到它是本地的,只要您从带有偏移量的字符串创建它。

我想您遗漏的是UtcDateTime和LocalDateTime实际上是转换。因此,如果引用这两个属性,则要求转换值。因此,他们得到的值与“DateTime属性不受偏移量属性值的影响”的语句并不矛盾

UtcDateTime使用偏移量将DateTime属性的值转换为UTC(它将DateTime部分增加23小时)


LocalDateTime根据您的Windows时区设置(必须是UTC-1?)将DateTime属性的值转换为本地时间。

我想您错过的是UtcDateTime和LocalDateTime实际上是转换。因此,如果引用这两个属性,则要求转换值。因此,他们得到的值与“DateTime属性不受偏移量属性值的影响”的语句并不矛盾

UtcDateTime使用偏移量将DateTime属性的值转换为UTC(它将DateTime部分增加23小时)


LocalDateTime根据您的Windows时区设置(必须是UTC-1?)将DateTime属性的值转换为您的本地时间。

是的,但为什么在上面的示例中有受影响的DateTime?“dateString”具有“2012-03-01”日期,为什么DateTimeOffset将其转换为影响我的本地时间?更新了答案以讨论时间偏移。是的,但为什么我在上面的示例中具有受影响的DateTime?“dateString”具有“2012-03-01”日期,为什么DateTimeOffset将其转换为我的本地时间?更新了答案以讨论时间偏移。