将日期时间格式 MM/dd/yy H:mm:ss GMT+5.0 转换为 UTC



我想将 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;

相关内容

  • 没有找到相关文章

最新更新