使用DateTime.ParseExact

时间:2016-02-26 11:12:47

标签: c# datetime

我有下面的代码来记录消息。由于我想要为每个date设置日志,因此我尝试检索当前date,然后尝试使用格式为path/dd_mm_yyyy_LogFile.txt的特定日期创建日志文件。在此之前,我必须在没有时间的情况下检索当前的date

StreamWrite sw=null;
var d = Convert.ToString(DateTime.Today.ToShortDateString());
var date = DateTime.ParseExact(d, "dd_MM_yyyy", CultureInfo.InvariantCulture);
//Error in the above line  
sw = new StreamWriter(AppDomain.CurrentDomain.BaseDirectory + "\\" + d + "_LogFile.txt", true);
sw.WriteLine(DateTime.Now.ToString() + ": " + message);

但是字符串未被识别为有效的DateTime 。我关注了许多其他帖子,例如将"dd_MM_yyyy"更改为"dd-MM-yyy"或更改为"d-m-yyyy",但遗憾的是我仍然遇到同样的错误。还有什么在这里缺少?下面的截图供参考。如果您看到屏幕截图,我会获取正确的d值。但仍然是上述例外。

enter image description here

4 个答案:

答案 0 :(得分:3)

正如我从图片中看到的那样,您实际上需要"M/d/yyyy"格式:

  String d = @"2/26/2016"; // d's value has been taken from the screenshot
  DateTime date = DateTime.ParseExact(d, "M/d/yyyy", CultureInfo.InvariantCulture);

答案 1 :(得分:1)

Parse方法中的格式字符串应与ToShortDateString生成的格式字符串完全匹配。例如这适用于我:

var d = Convert.ToString(DateTime.Today.ToShortDateString());
Console.WriteLine(d);

var date = DateTime.ParseExact(d, @"MM/dd/yyyy", CultureInfo.InvariantCulture);
Console.WriteLine(date);

输出:

02/26/2016                                                                                                                                                                                                                                             
02/26/2016 00:00:00

答案 2 :(得分:1)

查看您发布的屏幕截图。字符串的运行时值为:

"2/26/2016"

因此格式字符串应为:

"M/dd/yyyy"

或:

"MM/dd/yyyy"

通过使用其他格式字符串,您明确告诉系统使用 exact 格式。并且您拥有的字符串与该格式不匹配。因此错误。

答案 3 :(得分:1)

改为创建d

var d = DateTime.Today.ToString("dd_MM_yyyy");

ToShortDateString()没有您想要的格式。