有没有人看到我做错了什么,我正在尝试解析日期以确保它是一个有效的日期,如果是这样的话,将它转换为我需要的格式。
我尝试过不同的方法,但都返回01/01/0001 00:00:00。
字符串值parseArrivalDate = 02/02/2013
DateTime ukDateFormat;
string ukFormat = "0:ddd, MMM d, yyyy";
DateTime.TryParseExact(parseArrivalDate, ukFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out ukDateFormat);
DateTime test = ukDateFormat; 好的,对不起,我没有很好地解释。如果我输入英国格式,比如说27/02/2013,当我输入英国格式为dd/MM/yyyy时,它工作正常,问题是当我输入美国或任何其他格式时,它返回了错误的日期,所以我想这就是问题所在。
在读完你的评论后,我现在明白了,我的英国格式第一次是正确的,所以我的问题是,我如何更改代码,以便任何日期格式都可以被正确解析。
希望这更有意义,谢谢
发布于 2013-03-27 22:59:01
你的字符串
"0:ddd, MMM d, yyyy"具有数字0、冒号:和与
"Wed, Mar 27, 2013"例如,如果区域性为英语(“"en-GB" (英国)”)。它可能来自String.Format、Console.WriteLine或类似的方法调用,在这些方法调用中,它被放入大括号{}中以格式化文本,如
Console.WriteLine("The date {0:ddd, MMM d, yyyy} was selected.", someDateTime);它可以与如下代码一起工作:
string arrivalDateString = "Wed, Mar 27, 2013";
...
DateTime result;
string yourFormat = "ddd, MMM d, yyyy"; // no "0:" part
bool isOK = DateTime.TryParseExact(arrivalDateString, yourFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out result);
if (isOK)
{
// Worked! Answer is in 'result' variable
}
else
{
// Didn't work! 'result' variable holds midnight 1 January 0001
}与"27/03/2013"对应的格式为"dd/MM/yyyy" (或"d/M/yyyy")。与"03/27/2013"对应的格式为"MM/dd/yyyy" (或"M/d/yyyy")。
不可能有一个方法同时处理两种日期样式,因为像这样的字符串
"01/04/2013" /* ambiguous */可能意味着要么
所以它是模棱两可的,我们没有办法知道日期是什么意思。另请参见Wikipedia: Calendar date → Date format。
发布于 2013-03-27 20:36:34
您的日期字符串是:02/02/2013,而您使用的格式是"0:ddd, MMM d, yyyy",这是错误的,如果它的月份是第一个,它应该是MM/dd/yyyy。
DateTime ukDateFormat;
string ukFormat = "MM/dd/yyyy";
DateTime.TryParseExact(parseArrivalDate, ukFormat,CultureInfo.InvariantCulture,DateTimeStyles.None, out ukDateFormat);
DateTime test = ukDateFormat; 如果您指定的日期先包含日,然后包含月,则使用"dd/MM/yyyy"格式,顺便说一下,您可以对单位数的日/月和双位数的日/月使用单位数d和M。
当前您正在获取DateTime.MinValue,因为由于格式无效而导致解析失败。
发布于 2013-03-27 20:37:16
我不知道您期望什么,但是您的输入字符串不符合您的ukFormat模式!所以这是完全正确的行为。
将您的模式更改为""dd/MM/yyyy""以使TryParseExact正常工作。
https://stackoverflow.com/questions/15658909
复制相似问题