将未知格式的日期字符串转换为datetime c#

时间:2015-03-10 12:16:23

标签: c# date datetime

我不知道DateTime的格式,因为网页有多种语言,并且有多种日期时间格式可用。我必须将datepicker UI中的波兰日期格式更改为d.m.yyyy,尽管ISO标准是YYYY-mm-dd。 .NET使用ISO标准,但每当我尝试使用Convert.ToDateTime(stringDate)时,我都会遇到异常String is not recognized as valid DateTime 。我尝试使用 Convert.ToDateTime(stringDate,CultureInfo.InvariantCulture),但没有帮助。如何成功转换为DateTime?

实施例: item.arrival是字符串,可以是10种以上的格式。 Convert.ToDateTime适用于所有人。 但: 波兰语言的item.arrival日期格式不再是yyyy-mm-dd(因为我需要更改它)所以Convert.ToDateTime不再适用于波兰语言。新格式为13.06.2015.因此,因为格式不是波兰语言的ISO标准,.NET无法进行转换。我希望现在更清楚了。  ArrivalDate = Convert.ToDateTime(item.arrival, CultureInfo.InvariantCulture),

2 个答案:

答案 0 :(得分:1)

  

我必须将datepicker UI中的poland dateformat更改为d.m.yyyy   ...   示例:item.arrival是一个字符串,可以是10种以上的格式。 Convert.ToDateTime适用于所有人。但是:poland语言的item.arrival dateformat不再是yyyy-mm-dd(因为我需要更改它)

根据您的说法,您的日期时间转换适用于除波兰语以外的所有人,并且您(在您的代码中)知道它何时是波兰语。因此,使用您需要使用的格式处理波兰语特殊,并正常处理其他九种。

答案 1 :(得分:1)

这就是我所做的。我把它放在一些PageBase类中,所以它应该比一些" if-poland-date"更加通用且不易出错的解决方案。关于项目的陈述。

CultureInfo newCulture = (CultureInfo)System.Threading.Thread.CurrentThread.CurrentCulture;
        if (newCulture.TwoLetterISOLanguageName == "pl")
        {

            DateTimeFormatInfo myDTFI = new CultureInfo("hr-HR", false).DateTimeFormat;
            newCulture.DateTimeFormat = myDTFI;
            CultureInfo ci = new CultureInfo("pl-PL");
            DateTimeFormatInfo dateformat = new DateTimeFormatInfo();
            ci.DateTimeFormat = myDTFI;
            CultureAndRegionInfoBuilder obj = new CultureAndRegionInfoBuilder("pl-PL", CultureAndRegionModifiers.Replacement);
            obj.LoadDataFromCultureInfo(ci);
            CultureAndRegionInfoBuilder.Unregister("pl-PL");
            obj.Register();

        }