C# 获取utc时间,以及utc datetime 互相转化

本文介绍在C#中如何获取和转换UTC时间,包括将DateTime对象转换为UTC时间,以及如何在中国时区(东八区)进行时间转换。提供了实用的UTC时间转换类,演示了如何将本地时间转换为UTC时间,并将其转换回北京时间。

大部分源于http://blog.sina.com.cn/s/blog_4c6e822d0102dsdz.html

刚开始学习一点C#知识,研究一下UTC时间获取,如下

DateTime dt = DateTime.UtcNow;

另:

DateTime.UtcNow.ToString()输出的是0时区的事件,

DateTime.Now.ToString()输出的是当前时区的时间,我们中国使用的是东八区的时间,所以差8个小时

以下是互相转换class

class utc    

{        

public static int ConvertDateTimeInt(System.DateTime time)        

{            

  double   intResult = 0;            

  System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));            

  intResult =  (time - startTime).TotalSeconds ;            

  return (int)intResult;        

}        

 

public static DateTime ConvertIntDatetime(double utc)        

{                    

  System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));            

  startTime = startTime.AddSeconds(utc);                

  startTime = startTime.AddHours(8);//转化为北京时间(北京时间=UTC时间+8小时 )            

  return startTime;        

}

//调用方法

// DateTime utcNow = DateTime.Now.ToUniversalTime();

// double utc= ConvertDateTimeInt(utcNow);

// DateTime dtime = ConvertIntDatetime(utc);

}
<think>我们正在处理一个关于C#获取当前UTC时间戳的问题。根据用户需求,我们需要提供获取当前UTC时间戳的方法,并参考了站内引用内容。 根据引用[1]:提供了两种方法,其中方法2使用了UTC时间: long timestamp = (long)((DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds); 根据引用[2]:介绍了时间戳的定义,并提到了从UTC时间1970年1月1日开始的毫秒数。 根据引用[3]:提供了一个工具类,其中GetTimeStamp方法使用DateTime.UtcNow来计算时间戳(毫秒级)。 用户明确要求获取当前UTC时间戳,因此我们将重点放在使用UTC时间的方法上,以避免时区转换问题。 我们可以提供以下方法: 方法1:使用DateTime.UtcNow(如引用[1]的方法2和引用[3]的方法) 方法2:使用DateTimeOffset.UtcNow(如引用[1]的方法1,但注意引用[1]的方法1中使用了DateTimeOffset.Now,我们需要改为使用UtcNow) 因此,我们可以提供两种主要方法: 1. 使用DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() (推荐,因为DateTimeOffset更明确地表示时间偏移,且直接提供方法) 2. 使用DateTime.UtcNow计算与Unix纪元(1970-01-01 00:00:00 UTC)的时间差 注意:Unix时间戳通常以秒或毫秒为单位,这里用户要求毫秒级。 我们分别给出这两种方法的代码示例,并解释。 另外,根据引用[3]还提供了将时间戳转换回时间的方法,但用户当前问题不需要,不过我们可以简要提及以备参考。 回答结构: 1. 介绍两种获取当前UTC时间戳(毫秒级)的方法。 2. 分别给出代码示例。 3. 简要说明两种方法的区别和推荐。 注意:用户要求使用中文回答。 </think> ### C#获取当前UTC时间戳的方法 在C#获取当前UTC时间的毫秒级时间戳(Unix时间戳)主要有以下两种推荐方法,均符合国际标准(从1970-01-01 00:00:00 UTC起计): #### 方法1:使用 `DateTimeOffset`(推荐) ```csharp // 获取当前UTC时间的毫秒级时间戳 long timestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); Console.WriteLine(timestamp); // 输出:1710000000000(示例值) ``` - **优点**:代码简洁高效,直接使用.NET内置方法 - **原理**:`DateTimeOffset.UtcNow` 获取精确的UTC时间,`ToUnixTimeMilliseconds()` 将其转换为毫秒级时间戳[^1] #### 方法2:通过 `DateTime.UtcNow` 计算 ```csharp // 手动计算UTC时间DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); TimeSpan timeSpan = DateTime.UtcNow - unixEpoch; long timestamp = (long)timeSpan.TotalMilliseconds; Console.WriteLine(timestamp); ``` - **适用场景**:兼容.NET 4.5以下版本 - **关键点**:必须指定`DateTimeKind.Utc`避免时区误差[^3] #### 重要说明 1. 两种方法结果**完全等效**,输出示例:`1710000000000` 2. UTC时间戳与本地时间戳的区别: - UTC:全球统一标准时间 - 本地时间:受操作系统时区设置影响 ```csharp // 错误示例:使用本地时间会导致时区偏差 var localTimestamp = (DateTime.Now - unixEpoch).TotalMilliseconds; // 可能差8小时(北京时间时区) ``` 3. 时间戳单位:毫秒(1秒=1000毫秒),如需秒级时间戳可除以1000 #### 验证时间戳转换(反向验证) ```csharp // 将时间戳转回UTC时间 DateTime utcTime = DateTimeOffset.FromUnixTimeMilliseconds(timestamp).UtcDateTime; Console.WriteLine(utcTime.ToString("yyyy-MM-dd HH:mm:ss.fff")); // 输出当前UTC时间 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值