转换DateTime格式MM / dd / yy H:mm:ss GMT + 5.0到UTC

时间:2015-04-13 11:03:35

标签: c# valueconverter

我想将 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。请帮助我。

3 个答案:

答案 0 :(得分:1)

您可以使用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;

答案 1 :(得分:1)

解析该字符串的问题是无法识别时区名称,偏移量采用-6.00而不是-6:00格式。

删除时区名称,并更改偏移格式,然后您可以解析日期,然后您可以使用ToUniversalTime方法将其转换为UTC:

DateTime t = DateTime.Parse(dateTime.Replace(" GMT ", " ").Replace(".", ":"));
DateTime utc = t.ToUniversalTime();

答案 2 :(得分:0)

你不能一气呵成。问题是您的日期时间字符串的格式包含不受支持格式的时区偏移组件:-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;