Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.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# 将WPF DatePicker值重新计算到特定Noda Time DateTimeZone_C#_Wpf_Datetime_Datepicker_Nodatime - Fatal编程技术网

C# 将WPF DatePicker值重新计算到特定Noda Time DateTimeZone

C# 将WPF DatePicker值重新计算到特定Noda Time DateTimeZone,c#,wpf,datetime,datepicker,nodatime,C#,Wpf,Datetime,Datepicker,Nodatime,我在我的项目中使用野田佳彦时间库来处理日期。但我需要允许用户在特定的Noda时区(非utc、非本地/系统)中使用DatePicker输入日期/时间。我怎样才能做到这一点 目前,我将DatePicker绑定到DateTime属性,并将属性setter中的该值转换为未指定的类型 public DateTime SessionDate { get { return _sessionDate; } set { _sessionDate =

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

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

public DateTime SessionDate
{
   get 
   { 
      return _sessionDate; 
   }
   set 
   { 
       _sessionDate = new DateTime(value.Ticks, DateTimeKind.Unspecified); 
       OnPropertyChanged("SessionDate"); 
   }
}
所以,现在我将用户输入的值表示为DateTime结构,类型未指定

但是我需要通过应用已知的日期时区从我未指定的会话中获取UTC值(Noda Instant)。我试着用

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

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

如果您的用户输入的是特定时区的时间,那么您就不是从一个
瞬间开始的。您从一个
LocalDateTime
和一个
DateTimeZone
开始。在进入
即时
之前,您需要将它们绑定在一起以获得
ZoneDateTime

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

另外,在您的属性中,我不确定为什么要指定记号,但您可以只执行
\u sessionDate=value谢谢,我将测试您的方法。我正在使用“ticks变通方法”,因为DateTime是不可变的,DatePicker返回的值是Kind.Local(所以要将DateTime的种类更改为Unspecified,这更好地描述了我的值,我正在使用构造函数中指定的Kind创建一个新的DateTime结构)。使用
DateTime.SpecifyKind
可能更清楚。做同样的事情。或者,只需将属性本身设置为
LocalDateTime