我有一个简单的例程来解析DateTime.Now
&对其执行.ToString()
以将其添加到要保存的文件名中:
DateTime timeNow = DateTime.Now;
string dateNow = timeNow.ToShortDateString();
DateTime dateTime = DateTime.ParseExact(dateNow, "dd/MM/yyyy", CultureInfo.InvariantCulture);
string DateString = dateTime.ToString("dd-MMM-yy");
string fileName = string.Concat("MyArticle_" + region + "_" + DateString + fileExtension);
这是结果输出字符串:
MyArticle_Africa_07-May-15.PNG
这一切都很好,直到我在美国机器上找到DateTime设置不同的用户,例如
15年5月7日
在这种情况下,我的ParseExact()
方法会抛出异常,因为输入不是有效的日期时间。有没有办法适应所有日期时间输入&解析为dd / MM / YYYY?
答案 0 :(得分:6)
实际上,您并不需要所有这些代码。你只需要这个:
// We just have to pass to the ToString
// method the exact format we want. Under the hood the CLR has
// the know how to execute this command and you get the desired
// output.
string DateString = DateTime.Now.ToString("dd-MMM-yy");
此外,当我们想要获得您提到的此异常时,我们使用DateTime.ParseExact
方法。说这个,我的意思是我们知道我们要解析的日期的字符串表示具有确切的格式,我们已在DateTime.ParseExact
中指定,如果其中一些不是我们想要的话。知道了。通常,我们会有一个try catch子句,在catch子句中我们会记录下来。
答案 1 :(得分:2)
你需要试试这个:
string DateString = DateTime.Now.ToString("dd-MMM-yy");
string fileName = String.Concat("MyArticle_" + region + "_" + DateString + fileExtension);
答案 2 :(得分:2)
您甚至不需要将DateTime.Now
转换为字符串,您可以使用String.Format一步创建整个字符串:
var fileName = String.Format("MyArticle_{0}_{1:dd-MMM-yy}{2}",
region,DateTime.Now,fileExtension);
或
var fileName = String.Format(CurrentInfo.InvariantCulture,
"MyArticle_{0}_{1:dd-MMM-yy}{2}",
region,DateTime.Now,fileExtension);
避免国际化问题。