System.TimeZoneInfo有一个名为IsDaylightSavingTime的方法,该方法接受DateTime对象,如果指定的日期时间落在该时区的DST中,则返回true.在NodaTime中是否有相同的功能或其他方式来实现相同的结果?
我想要完成的是将DateTime(从假设在EST/EDT中的字符串解析)转换为UTC.我正在使用NodaTime,因为我需要使用Olson时区.
使用NodaTime的ZoneLocalMappingResolver将无效(跳过)DateTime转换为UTC不会转换输入的分钟和秒部分,因为我已将CustomResolver配置为返回间隙后的间隔开始.NodaTime似乎没有等效的TimeZoneInfo.IsInvalidTime.
如何使用NodaTime将跳过的日期时间值转换为UTC并匹配下面的Utils类中的GetUtc()方法的结果?(Utils.GetUtc方法使用System.TimeZoneInfo而不是NodaTime)
这是测试用例:
[TestMethod]
public void Test_Invalid_Date()
{
var ts = new DateTime(2013, 3, 10, 2, 15, 45);
// Convert to UTC using System.TimeZoneInfo
var utc = Utils.GetUtc(ts).ToString(Utils.Format);
// Convert to UTC using NodaTime (Tzdb/Olson dataabase)
var utcNodaTime = Utils.GetUtcTz(ts).ToString(Utils.Format);
Assert.AreEqual(utc, utcNodaTime);
}
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
Assert.AreEqual失败.预计:<2013-03-10 07:15:45.000000>.实际:<2013-03-10 07:00:00.000000>.
这是Utils类(也在github上):
using System;
using NodaTime;
using NodaTime.TimeZones;
/// <summary>
/// Functions to Convert To and From UTC
/// </summary>
public class Utils
{
/// <summary>
/// The date …Run Code Online (Sandbox Code Playgroud)