DateTimeOffset vs DateTime
很多时候在开发过程中DateTimeOffset和DateTime混淆不知道如何用,这里总结一下
DateTimeOffset可以反映出相对于UTC的时间偏移量。
1、用DateTimeOffset表示local时间
var dateNow = DateTime.Now;
var offset = System.TimeZoneInfo.Local.GetUtcOffset(DateTime.Now);
var date = new DateTimeOffset(dateNow.Ticks, offset);
Console.WriteLine($"Current local date: {dateNow}, datetimeoffset: {date}.");
2、用DateTimeOffset表示UTC时间
var utcNow = DateTime.UtcNow; var date = new DateTimeOffset(utcNow.Ticks, TimeSpan.Zero); Console.WriteLine($"Current UTC date: {utcNow}, datetimeoffset: {date}.");
3、以下示例定义名为 ConvertFromDateTimeOffset 的方法,该方法可将 DateTimeOffset 值转换为 DateTime 值。 它可根据其偏移量确定 DateTimeOffset 值是 UTC 时间,还是本地时间或其他时间,并定义返回的日期和时间值相应的 Kind 属性。
static DateTime ConvertFromDateTimeOffset(DateTimeOffset dateTime) { if (dateTime.Offset.Equals(TimeSpan.Zero)) return dateTime.UtcDateTime; else if (dateTime.Offset.Equals(TimeZoneInfo.Local.GetUtcOffset(dateTime.DateTime))) return DateTime.SpecifyKind(dateTime.DateTime, DateTimeKind.Local); else return dateTime.DateTime; }
4、DateTimeOffset中Offset属性与ToOffset方法
如果同时指定Offset及ToOffset,DateTimeOffset返回的datetime既是传入DateTimeOffset的datetime
var offset = System.TimeZoneInfo.Local.GetUtcOffset(DateTime.Now); var dateNow = DateTime.Now; var localDate = new DateTimeOffset(dateNow.Ticks, offset).ToOffset(offset); Console.WriteLine($"Current local date: {dateNow}, datetimeoffset:{localDate}."); var utcNow = DateTime.UtcNow; var utcDate = new DateTimeOffset(utcNow.Ticks, offset).ToOffset(offset); Console.WriteLine($"Current UTC date: {utcNow}, datetimeoffset: {utcDate}.");
分类:
C#
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)