如何在转换字符串为DateTime时忽略偏移量
解决方法:忽略偏移量将字符串转为DateTime
我明白你的需求——就是不管字符串里的+01:00偏移信息,直接把前面的日期时间部分原封不动转成DateTime类型对吧?这里有两种简单的实现方式:
方法一:用DateTimeOffset解析(推荐)
这种方法不需要手动处理字符串,直接利用DateTimeOffset的特性来忽略偏移:
string input = "2017-02-13T12:11:03.303+01:00"; // 先解析成DateTimeOffset,完整保留所有信息 DateTimeOffset dateTimeOffset = DateTimeOffset.Parse(input); // 取DateTime属性,该值会忽略偏移,直接保留字符串里的原始日期时间 DateTime result = dateTimeOffset.DateTime; // 输出结果:2017-02-13 12:11:03.303
dateTimeOffset.DateTime返回的DateTime类型的Kind是Unspecified,完全符合你“忽略偏移量,保留原时间”的需求。
方法二:截断偏移部分后解析
如果你更倾向于先处理字符串再解析,可以先把偏移部分去掉,再用ParseExact指定格式:
string input = "2017-02-13T12:11:03.303+01:00"; // 截断到'+'符号之前的部分,去掉偏移信息 string trimmedInput = input.Split(new[] { '+' }, StringSplitOptions.None)[0]; // 指定精确格式解析 DateTime result = DateTime.ParseExact(trimmedInput, "yyyy-MM-ddTHH:mm:ss.fff", System.Globalization.CultureInfo.InvariantCulture);
这种方法也能得到同样的结果,适合你明确知道字符串偏移部分的分隔符是+的场景。
需要注意的是,不要直接用DateTime.Parse或者不带样式的ParseExact,因为它们会自动根据偏移量把时间转换为本地时区时间,这就违背了你“忽略偏移”的初衷啦。
内容的提问来源于stack exchange,提问作者SidD
相关产品推荐
相关产品推荐

