如何将格式为dd/MM/YYYY的日期字符串转换为YYYY-MM-dd日期时间格式?

3

我想将格式为 dd/MM/YYYY 的字符串日期转换为 YYYY-MM-dd 的日期时间格式。但是它返回给我一个错误:

"字符串未被识别为有效的 DateTime."

如何将 "04/26/2016" 字符串转换为 yyyy-MM-dd 日期时间格式?

 DateTime dt = DateTime.ParseExact("04/26/2016", "yyyy-MM-dd", CultureInfo.InvariantCulture);
 Console.WriteLine(dt);

4
ParseExact("04/26/2016", "yyyy-MM-dd" 中存在错误,应该将第二个参数修改为 "MM/dd/yyyy"。 - Lasse V. Karlsen
4个回答

15

您以错误的方式解析了日期字符串。 您应该:

DateTime dt = DateTime.ParseExact("04/26/2016", "MM/dd/yyyy", CultureInfo.InvariantCulture);
Console.WriteLine(dt.ToString("yyyy-MM-dd"));

这完全是错误的。-/不搭配得好。 - Patrick Hofman
顺便说一下,我非常喜欢在 ToString 方法中使用 InvariantCulture,因为 OP 的 CurrentCulture 可能不会使用 GregorianCalendar 作为 Calendar 属性。在这种情况下,此 ToString 方法生成的结果与 2016-04-16 不同。 - Soner Gönül

6

从技术上讲,您可以只进行一些字符串操作:

String source = "04/26/2016";
String result = String.Join("-", source.Split('/').Reverse());

不过,DateTime.ParseExact 是更好的解决方案:

String result = DateTime
  .ParseExact(source, "MM/dd/yyyy", CultureInfo.InvariantCulture)
  .ToString("yyyy-MM-dd", CultureInfo.InvariantCulture);  

2

显然,您的格式和字符串不完全匹配。参考文档

将指定的日期时间字符串表示形式转换为其DateTime等效项。字符串表示的格式必须与指定的格式完全匹配,否则将抛出异常

您应该改用 MM/dd/yyyy 格式。

DateTime dt = DateTime.ParseExact("04/26/2016", "MM/dd/yyyy", CultureInfo.InvariantCulture);

如果你想使用 yyyy-MM-dd 格式获取它的字符串表示形式,只需使用 ToString 方法,例如:

Console.WriteLine(dt.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture));

请注意,没有YYYY作为自定义日期格式。由于这些指定符是区分大小写的,您应该使用yyyy格式指定符代替。


1
尝试这种方式。
DateTime dt = DateTime.ParseExact("04/26/2016", "MM/dd/yyyy", CultureInfo.InvariantCulture);
 Console.WriteLine(dt.ToString("yyyy-MM-dd"));

你使用了错误的格式进行解析,不存在数字为26的月份。 - Roman
@PatrickHofman,第一个版本中是dd/MM/yyyy,但由于OP如此迅速地更改了它,我们没有将其视为修订,现在一切都好了。 - Soner Gönül
可能是错误的,也许答案已经被编辑过了。 - Roman
1
顺便说一下,我真的很喜欢在ToString方法中使用InvariantCulture,因为OP的CurrentCulture可能不使用GregorianCalendar作为日历属性。 在这种情况下,此ToString方法生成的结果与“2016-04-16”不同。 - Soner Gönül
如果 inObj 等于 DBNull.Value,则返回空字符串,否则将其转换为 DateTime 类型并以 "MM/dd/yyyy" 格式输出。 - charulatha krishnamoorthy
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接