我是NodaTime的新手,我想在我的应用程序中实现它。如何解析日期字符串到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)
我的结果变量现在是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;
}
我有这样的片段,并这种情况下,用户可以只输入date
说06/11/2015
然后在它保存到数据库中,我需要它的当前时间(用户的当前时间)用于查看目的。我将其转换为long
的原因是因为我正在使用实体框架。
这是可取的吗?
编辑问题 - 为什么你会让他们在这种情况下输入日期?这听起来像是用当前的日期和时间对订单进行时间戳。 –
@MattJohnson这只是一个想法,我想出了。我只是意识到它没有任何意义。我想我需要删除它。 –
是的,如果你只是时间戳,那么其余的都不适用,因为你只是使用'SystemClock.Instance.Now'来获取当前基于UTC的'Instant'。或者在数据库中使用'DateTime.UtcNow'或类似的函数,然后根本就不需要Noda Time。 –