Wal*_*tiD 8 c# unit-testing mstest
我有一个代码,用于比较上一个时间戳和实际时间戳.如果实际时间戳在最后一个时间戳之前,则系统时间已被操纵.由于从夏令时过渡到夏令时,我使用UTC.
现在我想为这种特殊情况编写单元测试.
public void TransitionFromDSTToNonDST()
{
var dayLightChangeEnd= TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Now.Year).End;
var stillInDaylightSavingTime= dayLightChangeEnd.Subtract(TimeSpan.FromMinutes(62));
//stillInDaylightSavingTime.IsDaylightSavingTime() returns true
//stillInDaylightSavingTime is 01.58 am
var noDaylightSavingTimeAnymore= dayLightChangeEnd.Subtract(TimeSpan.FromMinutes(32));
//noDaylightSavingTimeAnymore.IsDaylightSavingTime() returns false
//noDaylightSavingTimeAnymore is 02.28 am
}
Run Code Online (Sandbox Code Playgroud)
但实际上我想模拟以下内容:
var stillInDaylightSavingTime = //for example 02.18 am BEFORE switching to Non-DST
var noDaylightSavingTimeAnymore = //for example 02.10 am AFTER switching to Non-DST
Run Code Online (Sandbox Code Playgroud)
所以问题是如何定义02.18 am是否为DST.
MSDN说:
时区之间的转换操作(例如 UTC 与本地时间之间,或一个时区与另一个时区之间)会考虑夏令时,但算术和比较操作则不会。
IMO 您应该以 UTC 格式添加分钟数,然后转换为本地时间。
这是(更新后的)代码:
var dayLightChangeEnd = TimeZone.CurrentTimeZone.GetDaylightChanges(DateTime.Now.Year).End.ToUniversalTime();
var stillInDaylightSavingTime = dayLightChangeEnd.Subtract(TimeSpan.FromMinutes(62)).ToLocalTime();
Console.WriteLine(stillInDaylightSavingTime);
Console.WriteLine(stillInDaylightSavingTime.IsDaylightSavingTime());
var noDaylightSavingTimeAnymore = dayLightChangeEnd.Subtract(TimeSpan.FromMinutes(2)).ToLocalTime();
Console.WriteLine(noDaylightSavingTimeAnymore);
Console.WriteLine(noDaylightSavingTimeAnymore.IsDaylightSavingTime());
Run Code Online (Sandbox Code Playgroud)
@WaltiD:我无法发表评论,但上面的代码在 DST 转换之前和之后打印 02:58。
| 归档时间: |
|
| 查看次数: |
3878 次 |
| 最近记录: |