dev*_*os1 12
我想我会将TimeSpan加载到DateTime中,然后从DateTime获取通用时间并再次将其转换回来.
var dt = new DateTime( timeSpan.Ticks );
var utc = dt.ToUniversalTime();
Run Code Online (Sandbox Code Playgroud)
我在前面的几个答案中发现的一个问题是,从刻度创建日期时间会导致日期/时间,例如0001-01-01 04:00:00. 如果您位于具有正 UTC 偏移量的时区,当框架尝试减去 10 小时时,它会低于该值DateTime.MinValue,虽然它不会引发异常,但您最终会得到一个包含00:00:00而不是正确结果的 TimeSpan。
Ali Sepehri.Kh的答案通过使用解决了这个下溢问题.AddDays(1),但是因为对于遵守 DST 的地区,日期始终是 1 月 1 日,因此您最终可能会得到不正确的结果。因为我只对当天的时间跨度感兴趣,所以我最终使用了 Ali 代码的修改版本,该版本使用当前日期作为基础并向其添加 TimeSpan:
public static TimeSpan LocalTimeSpanToUTC(TimeSpan ts)
{
DateTime dt = DateTime.Now.Date.Add(ts);
DateTime dtUtc = dt.ToUniversalTime();
TimeSpan tsUtc = dtUtc.TimeOfDay;
return tsUtc;
}
public static TimeSpan UTCTimeSpanToLocal(TimeSpan tsUtc)
{
DateTime dtUtc = DateTime.UtcNow.Date.Add(tsUtc);
DateTime dt = dtUtc.ToLocalTime();
TimeSpan ts = dt.TimeOfDay;
return ts;
}
Run Code Online (Sandbox Code Playgroud)
class TimeConversion
{
public static TimeSpan LocalTimeSpanToUTC(TimeSpan ts)
{
DateTime dt = new DateTime(ts.Ticks).AddDays(1);
DateTime dtUtc = dt.ToUniversalTime();
TimeSpan tsUtc = dtUtc.TimeOfDay;
return tsUtc;
}
public static TimeSpan UTCTimeSpanToLocal(TimeSpan tsUtc)
{
DateTime dtUtc = new DateTime(tsUtc.Ticks).AddDays(1);
DateTime dt = dtUtc.ToLocalTime();
TimeSpan ts = dt.TimeOfDay;
return ts;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10024 次 |
| 最近记录: |