将WPF DatePicker值重新计算为特定的Noda Time DateTimeZone

本文关键字:Noda DateTimeZone Time 计算 DatePicker WPF 新计算 | 更新日期: 2023-09-27 17:59:05

我在项目中使用Noda Time库来处理Dates。但我需要允许用户在特定的Noda时区(非utc,非本地/系统)中使用DatePicker输入日期/时间。我怎样才能做到这一点?

目前,我将DatePicker绑定到DateTime属性,并将属性setter中的此值转换为未指定类型的

public DateTime SessionDate
{
   get 
   { 
      return _sessionDate; 
   }
   set 
   { 
       _sessionDate = new DateTime(value.Ticks, DateTimeKind.Unspecified); 
       OnPropertyChanged("SessionDate"); 
   }
}

所以,现在我有了由用户输入的值,该值表示为具有未指定种类的DateTime结构。

但我需要通过应用已知的DateTimeZone从我未指定的SessionDate中获取UTC值(Noda Instant)。我试着用

var instant = new Instant(SessionDateTime.Ticks);
var offset = myTimeZone.GetUtcOffset(instant);
instant = instant.PlusTicks(- offset.Ticks);

但我不确定这是否是一个好的方法

将WPF DatePicker值重新计算为特定的Noda Time DateTimeZone

如果您的用户输入的是特定时区的时间,那么您不会从Instant开始。您从LocalDateTimeDateTimeZone开始。您需要将这些绑定在一起以获得ZonedDateTime,然后才能获得Instant

LocalDateTime ldt = LocalDateTime.FromDateTime(SessionDateTime);
ZonedDateTime zdt = ldt.InZoneLeniently(myTimeZone);
Instant instant = zdt.ToInstant();