我想将 13/MAR/2015 11:26:26 GMT -6.00 转换为 UTC。我知道如何转换,如果是在某个标准时间内,我已经使用以下代码进行了转换。
string dateTime = "13/MAR/2015 11:26:26";
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById("Cental standard Time");
TimeZoneInfo.ConvertTimeToUtc(Convert.ToDateTime(dateTime), zone);
但我想将 13/MAR/2015 11:26:26 GMT -6.00 转换为 UTC。请帮助我。
解析该字符串的问题在于无法识别时区名称,并且偏移量采用 -6.00
格式而不是 -6:00
。
删除时区名称,并更改偏移量格式,就可以解析日期,然后可以使用ToUniversalTime
方法将其转换为UTC:
DateTime t = DateTime.Parse(dateTime.Replace(" GMT ", " ").Replace(".", ":"));
DateTime utc = t.ToUniversalTime();
您可以使用 DateTime.ToUniversalTime Method
例如
string dateTime = "13/MAR/2015 11:26:26";
TimeZoneInfo zone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
var local = TimeZoneInfo.ConvertTimeToUtc(Convert.ToDateTime(dateTime), zone);
var offcet = zone.GetUtcOffset(local);
string output = local + " GMT " + offcet.Hours;
GMT 等于 UTC(尽管不是完全相同的东西),因此您可以将字符串中的 GMT 替换为 UTC 并从那里解析时区。
你不能一口气做到这一点。问题是日期时间字符串的格式包含不受支持的格式的时区偏移量:-6.00
而不是-06:00
。如果不是这种情况,您可以通过以下方式直接解析字符串:
var myDateTime = "13/MAR/2015 11:26:26 GMT -06:00";
var fmt = "dd/MMM/yyyy HH:mm:ss 'GMT' zzz";
var dto = DateTimeOffset.ParseExact(myDateTime, fmt, CultureInfo.InvariantCulture);
var utcTime = dto.UtcDateTime;
你必须通过做以下事情来破解它:
var myDateTime = "13/MAR/2015 11:26:26 GMT -6.00";
var fmt = "dd/MMM/yyyy HH:mm:ss 'GMT' zzz";
var dto = DateTimeOffset.ParseExact(myDateTime.Replace(".", ":")), fmt, CultureInfo.InvariantCulture);
var utcTime = dto.UtcDateTime;