C# - 将日期时间格式转换为 yyyy-MM-dd

4

我是一名有帮助的助手,可以为您翻译以下内容。

我正在尝试将日期时间格式从“dd/MM/yyyy”更改为“yyyy-MM-dd”。

这是我目前拥有的:

DateTime date = Convert.ToDateTime("31/01/2000");
Console.WriteLine(date);

String format = "yyyy-MM-dd";
String dateStr = date.ToString(format);
Console.WriteLine(dateStr);

DateTime parsedDate = DateTime.ParseExact(dateStr, format, CultureInfo.InvariantCulture);
Console.WriteLine(parsedDate);

我得到了这些结果:
31/01/2000 12:00:00 AM
2000-01-31
31/01/2000 12:00:00 AM

最终,我希望最后的结果是2000-01-31。
编辑:为了澄清我的实际目标。我正在使用SSIS将一个DT_DATE(dd/MM/yyyy)字段转换为另一个DT_DATE(yyyy-MM-dd)字段。所以我想使用一个脚本组件。 这意味着我不能将其转换回字符串。
编辑++答案:
对不起,大家,我想我把问题搞混了,但现在我可以自己回答它了。
我的目标是在SSIS中将源字段DT_DATE(dd/MM/yyyy)转换为目标字段DT_DATE(yyyy-MM-dd)。
我首先尝试使用Derived Column通过用(DT_DBDATE)field替换原始字段来完成。这并没有起作用,因为它给了我原始的源。
所以我尝试使用一个脚本组件,导致了我问题的上半部分,和很多困惑。它根本没用。
解决方案是使用Derived Column通过添加一个新列并给它(DT_DBDATE)field。 DT_DBDATE的原始格式实际上是yyyy-MM-dd。

哦,等一下,我刚刚找到了http://stackoverflow.com/questions/3373835/convert-string-to-specific-datetime-format <- 这个有意义。 - kouri
1
这里的问题在哪里?你已经在示例中得到了你想要的代码。那个日期与你所需的日期相匹配。你也可以尝试 dateTimeInstance.ToShortDateString()。你可能还想查看区域设置和 Culture 类。这可以帮助你根据系统设置自动使你的日期以特定格式输出。 - Merlyn Morgan-Graham
抱歉,我更新了我的问题。我还是初学者。dateTimeInstance.ToShortDateString()会给我所需的格式吗?我想要的不是将日期转换为任意格式的字符串,而是让它保持作为DateTime对象时的格式。也许Culture类会有帮助,但我已经看了一段时间了,似乎找不到解决方案。 - kouri
你可能无法完成你想做的事情。请参阅此MSDN文章 - “当将字符串转换为DT_DATE或反之时,使用转换的区域设置。但是,日期采用YYYY-MM-DD的ISO格式,而不管区域设置首选项是否使用ISO格式”。但你仍然可以尝试。我不知道“脚本组件”是什么(我没有做过SQL Server),但是尝试简单地使用(DT_DATE)myDateTime.ToString("yyyy-MM-dd");。如果它起作用了,那是因为它将DateTime转换为字符串,然后转换为DB_DATE - Merlyn Morgan-Graham
嘿,谢谢你的提示。看到那个之后,我再次检查了(DT_DBDATE)的格式,结果它正是我想要的格式。所以我只需要使用一个Derived Column和"(DT_DBDATE)fieldname",就可以愉快地转换它了。 - kouri
我觉得我把问题搞混了。没关系。此时最好的做法(如果你想投入时间)是整理问题(尽可能保留编辑),修改标题,并添加自己的答案。 - Merlyn Morgan-Graham
1个回答

19

我认为你只需要了解关于ToString重载的知识:

string fromFormat = "dd/MM/yyyy"; 
string toFormat = "yyyy-MM-dd";

DateTime newDate = DateTime.ParseExact("15/01/2001", fromFormat, null);

Console.WriteLine(newDate.ToString(toFormat));

谢谢,我还在我的评论中提到了一些其他链接。 我没有考虑清楚。我需要以特定的格式实际存储一个 DateTime 对象,而不是将其转换回字符串,但我认为这是不可能的。 - kouri

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