C#DateTimeOffset LocalDateTime与ToLocalTime

C#DateTimeOffset LocalDateTime与ToLocalTime,c#,datetimeoffset,C#,Datetimeoffset,有人能解释一下C#DateTimeOffset中ToLocalTime()方法和LocalDateTime属性之间的区别吗?文档说明如下: : 获取表示当前DateTimeOffset对象的本地日期和时间的值 : 将当前DateTimeOffset对象转换为表示本地时间的DateTimeOffset对象 查看,我们可以看到LocalDateTime属性获取表示为UTCDateTime对象的值,然后使用DateTime对象的ToLocalTime()方法对其进行转换 public DateTime

有人能解释一下C#DateTimeOffset中ToLocalTime()方法和LocalDateTime属性之间的区别吗?

文档说明如下:

:

获取表示当前DateTimeOffset对象的本地日期和时间的值

:

将当前DateTimeOffset对象转换为表示本地时间的DateTimeOffset对象

查看,我们可以看到
LocalDateTime
属性获取表示为UTC
DateTime
对象的值,然后使用
DateTime
对象的
ToLocalTime()
方法对其进行转换

public DateTime UtcDateTime {
    [Pure]
    get {
        Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Utc);
        return DateTime.SpecifyKind(m_dateTime, DateTimeKind.Utc);
    }
}

public DateTime LocalDateTime {
    [Pure]
    get {
        Contract.Ensures(Contract.Result<DateTime>().Kind == DateTimeKind.Local);
        return UtcDateTime.ToLocalTime();
    }
}
您可以使用以下代码测试结果:

DateTimeOffset dto = new DateTimeOffset(2020, 10, 01, 9, 0, 0, 0, TimeSpan.FromHours(9));
Console.WriteLine(dto.ToString(System.Globalization.CultureInfo.InvariantCulture)); // 10/01/2020 09:00:00 +09:00

DateTime localTimeDt = dto.LocalDateTime;
Console.WriteLine(localTimeDt.ToString(System.Globalization.CultureInfo.InvariantCulture)); // 10/01/2020 02:00:00

DateTimeOffset localTimeDto = dto.ToLocalTime();
Console.WriteLine(localTimeDto.ToString(System.Globalization.CultureInfo.InvariantCulture)); // 10/01/2020 02:00:00 +02:00
当然,
DateTimeOffset
保留Rextester系统时间的+2:00,因为这是它基于的时区

DateTimeOffset dto = new DateTimeOffset(2020, 10, 01, 9, 0, 0, 0, TimeSpan.FromHours(9));
Console.WriteLine(dto.ToString(System.Globalization.CultureInfo.InvariantCulture)); // 10/01/2020 09:00:00 +09:00

DateTime localTimeDt = dto.LocalDateTime;
Console.WriteLine(localTimeDt.ToString(System.Globalization.CultureInfo.InvariantCulture)); // 10/01/2020 02:00:00

DateTimeOffset localTimeDto = dto.ToLocalTime();
Console.WriteLine(localTimeDto.ToString(System.Globalization.CultureInfo.InvariantCulture)); // 10/01/2020 02:00:00 +02:00