1

我想将这种格式的字符串转换Month DD, YYYYDateTime对象,性能在这里非常重要。

字符串示例:

string AlaaJoseph = "October 23, 1996";
string JennetteMcCurdy = "June 26, 1992";
4

4 回答 4

7
DateTime dt = DateTime.ParseExact("October 23, 1996",
                                  "MMMM d, yyyy",
                                  new CultureInfo("en-US"));
于 2013-08-13T04:18:50.347 回答
2

看看使用类似的东西

DateTime.TryParseExact 方法(String、String[]、IFormatProvider、DateTimeStyles、DateTime)

使用指定的格式数组、特定于区域性的格式信息和样式将日期和时间的指定字符串表示形式转换为其等效的 DateTime。字符串表示的格式必须至少与指定格式中的一种完全匹配。该方法返回一个值,指示转换是否成功。

就像是

string AlaaJoseph = "October 23, 1996";
DateTime AlaaJosephDateTime;
if (DateTime.TryParseExact(AlaaJoseph, "MMMM dd, yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out AlaaJosephDateTime))
    Console.WriteLine("DateTimeTryParseExact Passed");

string JennetteMcCurdy = "June 26, 1992";
DateTime JennetteMcCurdyDateTime;
if (DateTime.TryParseExact(JennetteMcCurdy, "MMMM dd, yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out JennetteMcCurdyDateTime))
    Console.WriteLine("DateTimeTryParseExact Passed");

另外,要了解的另一件事是自定义日期和时间格式字符串

于 2013-08-13T04:17:45.447 回答
1

你可以这样做:

 DateTime dt = DateTime.ParseExact("October 23, 1996",
                                      "MMMM d, yyyy",
                                      new CultureInfo("en-US"));
于 2013-08-13T06:01:46.917 回答
0

性能在这里很重要

我认为性能是次要的。程序在所有情况下的正常运行是最重要的。如果它在一种情况下很快并且在九种情况下失败,那么拥有一个快速程序是没有用的。您应该首先使您的程序在所有情况下都可以工作,然后再考虑进行优化。即使您编写自己的解析器来解析字符串,您仍然必须在任何阶段进行所有异常处理。

因此,与其重新发明轮子并确保您不必处理任何类型的异常处理,而是让框架为您做这件事。你应该使用

DateTime.TryParseExact

它还有一个重载,它采用 string[] 格式,您可以在其中指定您希望用户提供的所有格式

string[] formats= {"MMMM dd, yyyy","MMM dd, yyyy","M/d/yyyy h:mm:ss tt", "M/d/yyyy h:mm tt", 
               "MM/dd/yyyy hh:mm:ss", "M/d/yyyy h:mm:ss", 
               "M/d/yyyy hh:mm tt", "M/d/yyyy hh tt", 
               "M/d/yyyy h:mm", "M/d/yyyy h:mm", 
               "MM/dd/yyyy hh:mm", "M/dd/yyyy hh:mm"};

DateTime resultantDate;
string AlaaJoseph = "October 23, 1996";
if (DateTime.TryParseExact(AlaaJoseph, formats, 
                          new CultureInfo("en-US"), 
                          DateTimeStyles.None, 
                          out resultantDate))
{
     //your rest of code
}
于 2013-08-13T04:43:42.597 回答