首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DateTime.TryParseExact CultureInfo.InvariantCulture

DateTime.TryParseExact CultureInfo.InvariantCulture
EN

Stack Overflow用户
提问于 2013-03-27 20:34:29
回答 6查看 20.9K关注 0票数 5

有没有人看到我做错了什么,我正在尝试解析日期以确保它是一个有效的日期,如果是这样的话,将它转换为我需要的格式。

我尝试过不同的方法,但都返回01/01/0001 00:00:00

字符串值parseArrivalDate = 02/02/2013

代码语言:javascript
复制
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时,它工作正常,问题是当我输入美国或任何其他格式时,它返回了错误的日期,所以我想这就是问题所在。

在读完你的评论后,我现在明白了,我的英国格式第一次是正确的,所以我的问题是,我如何更改代码,以便任何日期格式都可以被正确解析。

希望这更有意义,谢谢

EN

回答 6

Stack Overflow用户

发布于 2013-03-27 22:59:01

你的字符串

代码语言:javascript
复制
"0:ddd, MMM d, yyyy"

具有数字0、冒号:和与

代码语言:javascript
复制
"Wed, Mar 27, 2013"

例如,如果区域性为英语(“"en-GB" (英国)”)。它可能来自String.FormatConsole.WriteLine或类似的方法调用,在这些方法调用中,它被放入大括号{}中以格式化文本,如

代码语言:javascript
复制
Console.WriteLine("The date {0:ddd, MMM d, yyyy} was selected.", someDateTime);

它可以与如下代码一起工作:

代码语言:javascript
复制
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")。

不可能有一个方法同时处理两种日期样式,因为像这样的字符串

代码语言:javascript
复制
"01/04/2013"   /* ambiguous */

可能意味着要么

  • 1 2013年4月
  • 2013年1月4日

所以它是模棱两可的,我们没有办法知道日期是什么意思。另请参见Wikipedia: Calendar date → Date format

票数 7
EN

Stack Overflow用户

发布于 2013-03-27 20:36:34

您的日期字符串是:02/02/2013,而您使用的格式是"0:ddd, MMM d, yyyy",这是错误的,如果它的月份是第一个,它应该是MM/dd/yyyy

代码语言:javascript
复制
DateTime ukDateFormat;
string ukFormat = "MM/dd/yyyy";    
DateTime.TryParseExact(parseArrivalDate, ukFormat,CultureInfo.InvariantCulture,DateTimeStyles.None, out ukDateFormat);    
 DateTime test = ukDateFormat; 

如果您指定的日期先包含日,然后包含月,则使用"dd/MM/yyyy"格式,顺便说一下,您可以对单位数的日/月和双位数的日/月使用单位数dM

当前您正在获取DateTime.MinValue,因为由于格式无效而导致解析失败。

票数 1
EN

Stack Overflow用户

发布于 2013-03-27 20:37:16

我不知道您期望什么,但是您的输入字符串不符合您的ukFormat模式!所以这是完全正确的行为。

将您的模式更改为""dd/MM/yyyy""以使TryParseExact正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15658909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档