DateTimeOffset:DateTime是本地时间还是UTC时间?

问题描述 投票:0回答:1

今天与同事交谈时,我非常困惑,所以请原谅。我有这个:

  1. 日期:2020-04-01(yyyy-MM-dd)
  2. 时间:10:00:00
  3. 时区:+2

[当我将其返回给我的同事时,我通过返回json的API来执行此操作,它在行上返回了内容

{
    ...
    "dateTimeOffset": "2020-04-01T10:00:00+02:00"
    ...
}

我这样构建我的DateTimeOffset:

var utc = DateTime.UtcNow;
string time = "10:00:00";
string timezoneIdentifier = "Romance Standard Time";
var date = DateTime.Now.Date;
 var zone = TimeZoneInfo.FindSystemTimeZoneById(timezoneIdentifier);
var timespanOffset = zone.GetUtcOffset(utc);

var baseDateTime = date + TimeSpan.Parse(time);
baseDateTime= DateTime.SpecifyKind(baseDateTime, DateTimeKind.Unspecified);
var dateTimeOffset = new DateTimeOffset(baseDateTime, timespanOffset);

[当他将其拉入时,他的部分将时间转换为“ 12:00:00”,即:它添加了时区,这确实使我受益,因为我很困惑,因为,他希望我将他发送给他“ 08:00:00 +2”,因此它可以正确显示给最终用户,但我拒绝了,因为我的理解是:时间部分为当地时间,而+2描述与UTC的偏移量,这不是相反的:时间部分是UTC,您必须添加偏移量才能获取本地时间。我在文档的任何地方都找不到它:https://docs.microsoft.com/en-us/dotnet/api/system.datetimeoffset?view=netcore-2.2除了

DateTimeOffset结构包括一个DateTime值,以及一个Offset属性,该属性定义当前DateTimeOffset实例的日期和时间与世界标准时间(UTC)之间的时差。因为它精确地定义了相对于UTC的日期和时间,所以DateTimeOffset结构不包括Kind成员,就像DateTime结构所做的那样]

但是那对我来说还不够好。我的大脑不会接受它。所以:1.是DateTimeOffset中的时间是给定区域的本地时间,还是2.是UTC时间,您必须添加/减去偏移量才能获得本地时间

我知道这应该是基本的东西,但是我们已经讨论了太多了,以至于我不知道该怎么想了。

希望有人可以提供帮助。

c# date datetime datetimeoffset
1个回答
0
投票
DateTimeOffset结构包括一个DateTime值,以及一个Offset属性,用于定义当前DateTimeOffset实例的日期和时间以及世界标准时间(世界标准时间)。由于它准确定义了相对于UTC的日期和时间,因此DateTimeOffset结构不包含Kind成员,因为DateTime结构确实

可以表示为DateTime + offset = UTC

所以:

2020-04-01T10:00:00 + 02:00 = 12:00:00 UTC
© www.soinside.com 2019 - 2024. All rights reserved.