转换为纪元时间戳添加小时偏移量
Converting to epoch time-stamp adding hours offset
我在字符串中的日期时间为“20160127003500”。
我需要做的是将其转换为 Unix 时间戳并添加小时数。
我想将小时偏移添加为“1”或“2”或“24”。
谁能指导我正确的方向。
问候
首先,将整个字符串(包括你在问题评论中提到的偏移量)解析为DateTimeOffset
:
using System.Globalization;
string s = "20160129205500 +0100";
string format = "yyyyMMddHHmmss zzz";
DateTimeOffset dto = DateTimeOffset.ParseExact(s, format, CultureInfo.InvariantCulture);
然后,有几种不同的方法可以获取 Unix 时间戳。请注意,根据 "Unix timestamp" 的纯粹定义,结果将以 秒 为单位,尽管如今许多语言使用更高的精度(例如 毫秒 用于 JavaScript).
如果您的目标是 .NET 4.6 或更高版本,只需使用 built-in 方法:
// pick one for the desired precision:
long timestamp = dto.ToUnixTimeMilliseconds();
long timestamp = dto.ToUnixTimeSeconds();
如果您的目标是较早版本的 .NET,请自行计算:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// pick one for the desired precision:
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalMilliseconds;
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalSeconds;
我在字符串中的日期时间为“20160127003500”。 我需要做的是将其转换为 Unix 时间戳并添加小时数。
我想将小时偏移添加为“1”或“2”或“24”。
谁能指导我正确的方向。
问候
首先,将整个字符串(包括你在问题评论中提到的偏移量)解析为DateTimeOffset
:
using System.Globalization;
string s = "20160129205500 +0100";
string format = "yyyyMMddHHmmss zzz";
DateTimeOffset dto = DateTimeOffset.ParseExact(s, format, CultureInfo.InvariantCulture);
然后,有几种不同的方法可以获取 Unix 时间戳。请注意,根据 "Unix timestamp" 的纯粹定义,结果将以 秒 为单位,尽管如今许多语言使用更高的精度(例如 毫秒 用于 JavaScript).
如果您的目标是 .NET 4.6 或更高版本,只需使用 built-in 方法:
// pick one for the desired precision:
long timestamp = dto.ToUnixTimeMilliseconds();
long timestamp = dto.ToUnixTimeSeconds();
如果您的目标是较早版本的 .NET,请自行计算:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// pick one for the desired precision:
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalMilliseconds;
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalSeconds;