我是NodaTime的新手,希望在我的应用程序中实现它。
我该如何将日期字符串解析为NodaTime对象?
这是我目前拥有的:
var dateInput = "06/11/2015";
var pattern = InstantPattern.CreateWithInvariantCulture("dd/MM/yyyy");
var parseResult = pattern.Parse(dateInput);
var localDate = parseResult.Value;
DateTimeZone tzNZ = DateTimeZoneProviders.Tzdb["Asia/Hong_Kong"];
ZonedDateTime result = localDate.InZone(tzNZ);
我的localDate变量现在是2015-11-06T00:00:00Z
(根据我所读的ISO格式,最后一部分中有Z表示它是UTC)
我的result变量现在是2015-11-06T13:00:00 NZ (+13)
但我不确定我是否走对了路。
以下是我真正想要的:
- 将
dateInput
(日期字符串)转换为NodaTime对象,格式为dd/MM/yyyy
- 然后将其作为UTC,转换为
long
数据类型,然后保存到数据库中 - 然后尝试检索保存的数据,使用特定时区。比如说
Asia/Hong_Kong
这是可能的吗?
编辑
var dateInput = "06/11/2015";
var pattern = LocalDatePattern.CreateWithInvariantCulture("dd/MM/yyyy");
LocalDate parseResult = pattern.Parse(dateInput).Value;
DateTimeZone tzHK = DateTimeZoneProviders.Tzdb["Asia/Hong_Kong"];
LocalTime time = GetTimeOfDay();
LocalDateTime localDateTime = parseResult + time;
// change it to UTC then convert it to
// long data type then save it to the database
// methods
private LocalTime GetTimeOfDay()
{
var instant = SystemClock.Instance.Now;
var tz = DateTimeZoneProviders.Tzdb["Asia/Hong_Kong"];
return instant.InZone(tz).TimeOfDay;
}
我有这个片段以及这个场景,用户只能输入日期,例如06/11/2015,然后将其保存到数据库中,在查看时需要使用当前时间(用户的当前时间)。我将其转换为“long”的原因是因为我正在使用Entity Framework。
这样做是否可行?
SystemClock.Instance.Now
来获取当前基于UTC的Instant
。或者在数据库中使用DateTime.UtcNow
或类似的函数,这样你就完全不需要使用Noda Time了。 - Matt Johnson-Pint