2012-03-01 60 views
7

今天我遇到了一个非常奇怪的问题。DateTime.Parse今天失败(2012年3月1日)! o_0

尝试执行此C#代码:

class Program 
{ 
    static void Main(string[] args) 
    { 

     string yesterdayString = (DateTime.Now - TimeSpan.FromDays(1)).ToString("R"); 
     string nowString = DateTime.Now.ToString("R"); 

     DateTime.Parse(yesterdayString); 
     DateTime.Parse(nowString); 

     DateTime.Parse("Wed, 29 Feb 2012 18:05:49 GMT"); // this is what i have in yesterdayString 
     DateTime.Parse("Thu, 01 Mar 2012 18:05:40 GMT"); // this is what i have in nowString 
    } 
} 

当然,你会得到这个问题就在今天。我已经添加了最后两条命令,让您知道问题所在。 明天和整个3月的月份DateTime.Parse会抛出一个FormatException(String未被识别为有效的DateTime。)

为什么?

+1

,当我通过Linqpad运行此代码的工作。 – DaveShaw 2012-03-01 17:33:59

+1

在.NET 4.0,FWIW上适合我。 – 2012-03-01 17:34:21

+0

你的代码适合我。 – BlueM 2012-03-01 17:35:19

回答

2

我会说你发现了一个错误。这应该工作:

// 
var spanish = CultureInfo.GetCultureInfo("es"); 
var date = DateTime.Parse(DateTime.Now.ToString("R", spanish), spanish); 

或意大利它仍然抛出...

var italian = CultureInfo.GetCultureInfo("it"); 
var date = DateTime.Parse(DateTime.Now.ToString("R", italian), italian); 
+1

看来,日期时间分析器不喜欢意大利和西班牙三月月..你的解决方案不适合我..我会给我一个自我解决方案= D ..无论如何。 ps .. 我不能给我一个答案..所以我给你一个提示: DateTime.Parse(nowString,CultureInfo.GetCultureInfo(“en”)); – 2012-03-01 20:15:52

+0

@ user846168:这不是一个解决方案,而是一个_too-big-for-a-comment_答案。这就是我将其标记为CW的原因。 – 2012-03-01 20:21:20

2
+0

就是这样,我今天有同样的问题。可能是因为在西班牙语中,March = Marzo,所以RFC1123标准.net在“es”语言环境中无法解析“Mar”,并且他们不知道如何为此错误制定解决方法,因此他们将其关闭为“won” t fix“(* facepalm *) – dbalboa 2015-03-02 11:11:46

相关问题