我必须通过datetime等c#类将此时间格式字符串(20130221191038.576375+330)
转换为普通日期时间。
请分享转换这个的想法。。
谢谢大家,在Erik、tung和BlackHatShadow的帮助下,我得到了满足我需求的解决方案。
引用此
这也是
您的格式是CIM_DATETIME值,该值几乎易于解析。唯一的问题是,它将时区指定为以分钟为单位的偏移量。
您可以使用DateTime.TryParseExact
转换时区说明符之前的字符串部分,然后从结果中减去时区值(以分钟为单位)以获得UTC日期时间。如果需要,您可以转换为当地时间,或者将其保留为UTC形式。
public static DateTime? CIMToUTCDateTime(string CIM_DATETIME)
{
// CIM_DATETIME must be 25 characters in length
if (string.IsNullOrEmpty(CIM_DATETIME) || CIM_DATETIME.Length != 25)
return null;
// Get the datetime portion of the string without timezone offset
string dtPortion = CIM_DATETIME.Substring(0, 21);
// convert to datetime
DateTime dt;
if (!DateTime.TryParseExact(dtPortion, "yyyyMMddHHmmss.ffffff", System.Globalization.DateTimeFormatInfo.InvariantInfo, System.Globalization.DateTimeStyles.AssumeUniversal | System.Globalization.DateTimeStyles.AdjustToUniversal, out dt))
return null;
// subtract timezone offset to get UTC time equivalent
int tzoffset;
if (!Int32.TryParse(CIM_DATETIME.Substring(21), out tzoffset))
return null;
dt = dt.AddMinutes(-tzoffset);
// return UTC datetime
return dt;
}
现在我已经写了这个可怕的小方法,你已经找到了另一个解决方案。典型:P
我知道你已经找到了一个解决方案,但我遇到了这个不错的ManagementDateTimeConverter.Net类,它正是你想要的。你所需要做的就是:
// This gets converted to your local time
DateTime converted = ManagementDateTimeConverter.ToDateTime("20130221191038.576375+330")
// If you want the UTC equivalent:
converted.ToUniversalTime()