检查本地日期时间是否存在 NODA TIME
Check if local date time exist NODA TIME
如果日期时间确实存在,有没有办法验证它?
这听起来可能很奇怪,但是如果您将夏令时应用到某个区域,例如 America/New_york3 月 12 日。2017 年凌晨 2 点到凌晨 3 点是他们的夏令时。从 2017 年 3 月 12 日凌晨 2 点到 2:59am 的文学演讲在他们的时代不存在。我想验证给定的日期时间是否存在
我试过用这个
给定日期时间 = 2017 年 3 月 12 日 2:30am
var timeZoneProvider = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
var localDate = LocalDateTime.FromDateTime(dateTime);
var result = timeZoneProvider.AtStrictly(localDate).ToDateTimeUtc();
它抛出错误,有没有办法在使用 AtStrictly 之前对其进行验证?它抛出错误并表示日期时间不存在的地方,这是由于该区域的夏令时
DateTimeZone.MapLocal
方法可以为您提供此信息。这里有一些扩展方法可以使这变得容易。 (将它们放在静态的 class 某处。)
public static bool IsInvalidTime(this DateTimeZone tz, LocalDateTime ldt)
{
return tz.MapLocal(ldt).Count == 0;
}
public static bool IsAmbiguousTime(this DateTimeZone tz, LocalDateTime ldt)
{
return tz.MapLocal(ldt).Count > 1;
}
然后你可以在spring中做这样的事情:
var timeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
var localDateTime = new LocalDateTime(2017, 3, 12, 2, 30);
if (timeZone.IsInvalidTime(localDateTime)) { ... true ... }
秋季:
var timeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
var localDateTime = new LocalDateTime(2017, 11, 5, 1, 30);
if (timeZone.IsAmbiguousTime(localDateTime)) { ... true ... }
当然,这是假设您只想 pre-validate。如果您想实际应用一些转换规则,那就是 AtLeniently
或 ResolveLocal(... your custom rules ...)
的用武之地。
如果日期时间确实存在,有没有办法验证它?
这听起来可能很奇怪,但是如果您将夏令时应用到某个区域,例如 America/New_york3 月 12 日。2017 年凌晨 2 点到凌晨 3 点是他们的夏令时。从 2017 年 3 月 12 日凌晨 2 点到 2:59am 的文学演讲在他们的时代不存在。我想验证给定的日期时间是否存在
我试过用这个
给定日期时间 = 2017 年 3 月 12 日 2:30am
var timeZoneProvider = DateTimeZoneProviders.Tzdb.GetZoneOrNull("America/New_York");
var localDate = LocalDateTime.FromDateTime(dateTime);
var result = timeZoneProvider.AtStrictly(localDate).ToDateTimeUtc();
它抛出错误,有没有办法在使用 AtStrictly 之前对其进行验证?它抛出错误并表示日期时间不存在的地方,这是由于该区域的夏令时
DateTimeZone.MapLocal
方法可以为您提供此信息。这里有一些扩展方法可以使这变得容易。 (将它们放在静态的 class 某处。)
public static bool IsInvalidTime(this DateTimeZone tz, LocalDateTime ldt)
{
return tz.MapLocal(ldt).Count == 0;
}
public static bool IsAmbiguousTime(this DateTimeZone tz, LocalDateTime ldt)
{
return tz.MapLocal(ldt).Count > 1;
}
然后你可以在spring中做这样的事情:
var timeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
var localDateTime = new LocalDateTime(2017, 3, 12, 2, 30);
if (timeZone.IsInvalidTime(localDateTime)) { ... true ... }
秋季:
var timeZone = DateTimeZoneProviders.Tzdb["America/New_York"];
var localDateTime = new LocalDateTime(2017, 11, 5, 1, 30);
if (timeZone.IsAmbiguousTime(localDateTime)) { ... true ... }
当然,这是假设您只想 pre-validate。如果您想实际应用一些转换规则,那就是 AtLeniently
或 ResolveLocal(... your custom rules ...)
的用武之地。