我需要函数来标准化日期格式。 我有日期为2015年12月1日T00:00:00 + 00:00、2018年12月31日01:00:00等的字符串。
我尝试以下代码:
public static DateTime ToDateTime(this string date)
{
return DateTime.ParseExact(date, "yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
}
但是我有错误:
System.FormatException
HResult=0x80131537
Message=The string was not recognized as a valid DateTime element.
Source=mscorlib
Ślad stosu:
w System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
w System.DateTime.ParseExact(String s, String format, IFormatProvider provider)
w InsuranceService.Common.ExtensionMethods.StringExtensionMethods.ToDateTime(String date) w \\Mac\Home\Desktop\StringExtensionMethods.cs:wiersz 10
w AutoMapper.Internal.DelegateBasedResolver`2.Resolve(ResolutionResult source)
w AutoMapper.NullReferenceExceptionSwallowingResolver.Resolve(ResolutionResult source)
w AutoMapper.PropertyMap.<>c.<ResolveValue>b__44_0(ResolutionResult current, IValueResolver resolver)
w System.Linq.Enumerable.Aggregate[TSource,TAccumulate](IEnumerable`1 source, TAccumulate seed, Func`3 func)
w AutoMapper.PropertyMap.ResolveValue(ResolutionContext context)
w AutoMapper.Mappers.TypeMapObjectMapperRegistry.PropertyMapMappingStrategy.MapPropertyValue(ResolutionContext context, Object mappedObject, PropertyMap propertyMap)
如何解决?
答案 0 :(得分:1)
如果您有多种格式,并且知道所有可能格式的格式,则可以ParseExact
处理所有这些格式。
根据您的示例可能的格式
string format1 = "yyyy-MM-ddTHH:mm:sszzzz"; //2015-12-01T00:00:00+00:00"
string format2 = "MM/dd/yyyy HH:mm:ss"; //12/31/2018 01:00:00
string format3 = "dd.MM.yyyy HH:mm:ss"; //01.12.2015 00:00:00
可能的输入
string input1 = "2015-12-01T00:00:00+00:00";
string input2 = "12/31/2018 01:00:00";
string input3 = "01.12.2015 00:00:00";
解析
DateTime result = DateTime.ParseExact(input1, new[] { format1, format2, format3 },
System.Globalization.CultureInfo.InvariantCulture,
System.Globalization.DateTimeStyles.None);
所以ParseExact
将选择第一个有效格式并为您提供结果。