You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# Windows Form应用中UTC日期与毫秒时间戳互相转换实现方法

C# DateTimePicker UTC时间戳转换实现方案

前置配置

首先确保DateTime控件的格式符合你的要求,可在窗体初始化代码中添加以下配置:

dateTimePicker1.Format = DateTimePickerFormat.Custom;
dateTimePicker1.CustomFormat = "MM/dd/yyyy hh:mm:ss tt";
// 可选:强制使用固定区域规则避免不同系统的格式差异
dateTimePicker1.FormatProvider = CultureInfo.InvariantCulture;

1. 控件选中时间转UTC毫秒时间戳

注意不要直接调用ToUniversalTime()方法,该方法会将控件默认的本地时间属性做时区偏移转换,不符合你全程基于UTC的要求。我们只需要显式指定控件返回时间的Kind为UTC,再计算Unix时间戳即可:

// 取控件选中时间,显式标记为UTC类型,不做时区偏移转换
DateTime selectedUtcTime = DateTime.SpecifyKind(dateTimePicker1.Value, DateTimeKind.Utc);
// 计算和1970-01-01 00:00:00 UTC的时间差,取整毫秒数
long utcMilliTimestamp = (long)(selectedUtcTime - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;

得到的utcMilliTimestamp可直接发送给服务端。

2. 服务端UTC毫秒时间戳转控件显示格式

全程基于UTC时区转换,不需要转本地时间:

// 示例:服务端返回的UTC毫秒时间戳
long serverUtcTimestamp = 1627463450000;
// 转成UTC时间对象
DateTime utcTime = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(serverUtcTimestamp);
// 赋值给DateTimePicker,标记为Unspecified避免控件自动做本地时区转换
dateTimePicker1.Value = DateTime.SpecifyKind(utcTime, DateTimeKind.Unspecified);

// 若需要单独获取格式化后的字符串,可使用以下代码
string formattedUtcTime = utcTime.ToString("MM/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture);

注意事项

  • 代码需要引用System.Globalization命名空间来使用CultureInfo
  • 所有格式化操作建议传入CultureInfo.InvariantCulture,避免系统区域语言不同导致AM/PM、日期分隔符显示异常
  • 全程不要调用ToLocalTime()、ToUniversalTime()这类时区转换方法,仅通过DateTime.SpecifyKind修改时间类型标记即可满足需求

内容的提问来源于stack exchange,提问作者newcoder101

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 21:18:01