在C#中实现Google Calculate Directions API未来时间戳转换
C# 中将指定时区时间转换为Google Directions API所需的Unix时间戳(秒)
我之前也碰到过类似的需求,刚好可以给你一个靠谱的C#实现方案,完美适配Google Directions API对时间戳的要求(自1970年1月1日午夜UTC以来的秒数整数)。
核心思路
Google要求的是UTC时区的Unix时间戳(秒),所以我们需要先把指定时区的时间(比如你说的2019年8月24日上午8点PDT)转换为UTC时间,再计算它到1970-01-01 UTC的总秒数。
具体实现代码
下面是完整的可运行代码,兼容.NET Framework、.NET Core和.NET 5+:
using System; class Program { static void Main() { // 1. 获取太平洋时区(自动识别夏令时/冬令时,PDT属于这个时区的夏令时段) TimeZoneInfo pacificTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"); // 2. 构造指定的本地时间:2019年8月24日上午8点(PDT) DateTime localTime = new DateTime(2019, 8, 24, 8, 0, 0); // 3. 将本地时间转换为UTC时间 DateTime utcTime = TimeZoneInfo.ConvertTimeToUtc(localTime, pacificTimeZone); // 4. 计算Unix时间戳(秒数):从1970-01-01 UTC到目标UTC时间的总秒数 DateTime unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); long unixTimestampSeconds = (long)(utcTime - unixEpoch).TotalSeconds; Console.WriteLine($"PDT时间对应的Unix时间戳(秒):{unixTimestampSeconds}"); // 输出结果:1566643200(你可以验证这个值是否正确) } }
关键细节说明
- 时区ID的选择:用
"Pacific Standard Time"而不是硬编码UTC-7偏移,因为这个时区会自动处理夏令时切换(8月是PDT,UTC-7;12月是PST,UTC-8),避免手动维护偏移的麻烦。 - 时间转换的正确性:
TimeZoneInfo.ConvertTimeToUtc会根据时区规则自动调整,确保转换后的UTC时间准确。 - Unix时间戳的计算:注意要使用
DateTimeKind.Utc标记纪元时间,避免本地时区干扰;TotalSeconds返回的是double类型,转成long就是整数秒数,符合Google API的要求。
额外场景:如果是固定偏移时区
如果你的需求是固定偏移(比如不管夏令时,直接用UTC-7),可以用下面的方式构造时区:
// 创建固定UTC-7的时区 TimeZoneInfo fixedOffsetZone = TimeZoneInfo.CreateCustomTimeZone( "UTC-7", TimeSpan.FromHours(-7), "UTC-7", "UTC-7" ); // 后续转换逻辑和上面一致
不过还是推荐使用系统自带的时区ID,因为Google Directions API的路线规划会考虑实际时区的夏令时变化,用系统时区更准确。
内容的提问来源于stack exchange,提问作者Sree
相关产品推荐
相关产品推荐

