我在项目中使用Noda Time库来处理日期。但我需要允许用户在特定的Noda时区(非utc,非本地/系统)中使用DatePicker输入日期/时间。我怎样才能做到这一点?
目前,我将DatePicker绑定到DateTime属性,并将属性设置器中的此值转换为未指定的类型
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);
但我不确定这是否是一个好方法
答案 0 :(得分:1)
如果您的用户输入了与特定时区相关的时间,那么您不会以Instant
开头。您从LocalDateTime
和DateTimeZone
开始。您需要将这些内容绑定在一起才能获得ZonedDateTime
,然后才能访问Instant
。
LocalDateTime ldt = LocalDateTime.FromDateTime(SessionDateTime);
ZonedDateTime zdt = ldt.InZoneLeniently(myTimeZone);
Instant instant = zdt.ToInstant();