将 WPF DatePicker 值重新计算为特定的 Noda Time DateTimeZone
Recalculate WPF DatePicker value to specific Noda Time DateTimeZone
我在我的项目中使用 Noda Time 库来处理日期。但是我需要允许用户在特定的 Noda 时区(非 utc,非 local/system)中使用 DatePicker 输入 date/time。我怎样才能做到这一点?
目前我将 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);
但我不确定这是否是一个好方法
如果您的用户输入的是特定时区的时间,那么您并不是以 Instant
开始的。您从 LocalDateTime
和 DateTimeZone
开始。在获得 Instant
.
之前,您需要将它们绑定在一起以获得 ZonedDateTime
LocalDateTime ldt = LocalDateTime.FromDateTime(SessionDateTime);
ZonedDateTime zdt = ldt.InZoneLeniently(myTimeZone);
Instant instant = zdt.ToInstant();
我在我的项目中使用 Noda Time 库来处理日期。但是我需要允许用户在特定的 Noda 时区(非 utc,非 local/system)中使用 DatePicker 输入 date/time。我怎样才能做到这一点?
目前我将 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);
但我不确定这是否是一个好方法
如果您的用户输入的是特定时区的时间,那么您并不是以 Instant
开始的。您从 LocalDateTime
和 DateTimeZone
开始。在获得 Instant
.
ZonedDateTime
LocalDateTime ldt = LocalDateTime.FromDateTime(SessionDateTime);
ZonedDateTime zdt = ldt.InZoneLeniently(myTimeZone);
Instant instant = zdt.ToInstant();