使用NodaTime的明确日期时间表示 - 这可以用更少的仪式来完成吗?



我有一个相当简单的概念,我想用Noda Time来表示:

04/24/2015 4:00pm America/New_York

为了创建明确的表示形式,我做了以下操作:

var _americaNewYork = DateTimeZoneProviders.Tzdb["America/New_York"];
var pattern = LocalDateTimePattern.CreateWithInvariantCulture("M/d/yyyy h:mmtt");
var localTime = pattern.Parse(formattedDatetime).Value;
var zonedDateTime = localTime.InZoneLeniently(_easternTime);

有没有更简洁的方法来完成我上面所做的工作?我觉得我应该可以用一两行来做到这一点:

var unambiguous = new ZonedDateTime(string textToParse, DateTimePattern pattern, string timezone);

如果我真的想在发生更改时指定间隙语义,也许会有一些重载。

>我想说的是,您拥有的实际上是目前最好的方法 - 您正在解析正确的类型,因为您在文本中得到的内容("04/24/2015 4:00pm")确实是当地时间。(如果你真的有"美国/New_York"位,你绝对应该使用ZonedDateTimePattern

但是您仍然可以使用具有适当解析程序和模板值的ZonedDateTimePattern

var tzdb = DateTimeZoneProviders.Tzdb;
var pattern = ZonedDateTimePattern.Create(
    "M/d/yyyy h:mmtt",
    CultureInfo.InvariantCulture,
    Resolvers.LenientResolver,
    tzdb,
    NodaConstants.UnixEpoch.InZone(tzdb["America/New_York"]));
string text = "04/24/2015 4:00pm";
var zoned = pattern.Parse(text).Value;
Console.WriteLine(zoned);
显然,这需要更多的

代码开始,但您可以多次重用该模式。

正如我所说,我个人会坚持你所拥有的,因为它准确地说明了你想要做的事情:解析一个LocalDateTime,然后将其解析到一个特定的区域。

最新更新