多日期格式转换

时间:2018-12-21 07:29:01

标签: c#

我需要函数来标准化日期格式。 我有日期为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)

如何解决?

1 个答案:

答案 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将选择第一个有效格式并为您提供结果。