将C#中的DateTime转换为yyyy-MM-dd格式并存储到MySql的DateTime字段中。

63

我正在尝试将 DateTime 格式转换为 yyyy-MM-dd 格式并将其存储到 DateTime 对象中。但它给了我系统的 DateTime 格式,即 MM/dd/yyyy
我正在使用以下代码进行转换。

string dateTime = DateTime.Now.ToString();
string createddate = Convert.ToDateTime(dateTime).ToString("yyyy-MM-dd h:mm tt");         
DateTime dt = DateTime.ParseExact(createddate, "yyyy-MM-dd h:mm tt",CultureInfo.InvariantCulture);

但是以上任何一行都没有转换为指定的格式。
有人可以帮忙解决吗。

我从一个应用程序中获取DateTime对象并将其传递给另一个应用程序,该应用程序将该日期存储在MySql的DateTime字段中,该字段的格式为“yyyy-MM-dd”。
这就是为什么我发布了这个问题的原因。

项目1有一个类,我从中获取日期。 处理器类是应用程序的中间件,它处理DateTime格式以将其转换为特定格式。 然后将其传递给使用DateTime并将其存储在MySql字段中的其他项目。


3
为什么?对象中的存储方式不应该影响您的代码。在进行任何比较时,只需使用正确的文化背景即可。 - Smeegs
6
“Datatime”没有固定格式,其格式是根据您希望如何显示它来应用的(使用 ToString())。 - Bolu
我正在从其他应用程序获取日期,并将该日期传递到另一页,然后我尝试将该日期存储在MySql dateTime字段中。 - Rahul Gokani
4
你应该删除这个问题,然后询问“如何将一个datetime对象正确地存储在mysql的日期列中”。你现在关注的是解决方案,但实际上你只是看到了问题的症状,而不是问题本身。 - Smeegs
有点。你的所有代码仍然专注于改变对象存储数据的方式(这是不可能发生的)。你应该展示对象尝试更新表格的代码。 - Smeegs
显示剩余2条评论
8个回答

122

使用 DateTime.Now.ToString("yyyy-MM-dd h:mm tt");。请参阅此处


3
我希望你能将转换后的日期存储为DateTime格式。我可以按照指定格式获取该字符串数值。 - Rahul Gokani
1
你无法更改 DateTime 如何存储日期。但是当你需要输出此日期或以特定格式保存到数据库时,请使用 ToString 创建所需的格式。 - Alex
@RahulGokani DateTime并不以任何格式存储数据。数据将存储在单独的整数属性中(月份、年份、日期、小时等),格式只是字符串表示形式。 - Fedor Hajdu
对象的内部格式不是您可以设置的。当您将其转换为字符串时,可以按照上述描述进行格式化。也许您可以解释一下您想要实现什么? - automatic
我不明白为什么存储格式对你有什么影响。如果你想打印日期,可以按照Alex建议的方式进行格式化。如果你想直接操作对象本身,存储格式肯定无关紧要。因为你已经拥有了所有的小时/分钟等属性。 - SKull
@Mathew 是的,你说得对,但是我想将那个对象映射到MySQL字段,该字段的格式是"yyyy-MM-dd"。由于日期时间的格式不匹配,所以无法进行映射。 - Rahul Gokani

30
我们可以使用下面的内容,非常简单。
Date.ToString("yyyy-MM-dd");

1
他想要保存到一个DateTime对象中,上述代码提供给您一个字符串,您需要将其转换回DateTime,但这并不是直接的操作。 - Rajshekar Reddy
6
如果有人遇到以下错误:"No overload for method ToString takes 1 arguments",请尝试使用以下代码:((DateTime)Date).ToString("yyyy-MM-dd"); - Djeroen

6

尝试为CurrentCulture和CurrentUICulture设置自定义的CultureInfo。

Globalization.CultureInfo customCulture = new Globalization.CultureInfo("en-US", true);

customCulture.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd h:mm tt";

System.Threading.Thread.CurrentThread.CurrentCulture = customCulture;
System.Threading.Thread.CurrentThread.CurrentUICulture = customCulture;

DateTime newDate = System.Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd h:mm tt"));

6
你尝试过吗?
var isoDateTimeFormat = CultureInfo.InvariantCulture.DateTimeFormat;

// "2013-10-10T22:10:00"
 dateValue.ToString(isoDateTimeFormat.SortableDateTimePattern); 

// "2013-10-10 22:10:00Z"    
dateValue.ToString(isoDateTimeFormat.UniversalSortableDateTimePattern)

尝试在将C#日期时间值存储在MySQL数据库中时使用参数,这可能有所帮助。


我已经尝试过了,但它只给我字符串格式。我需要将其存储在DateTime中。 - Rahul Gokani
你是如何存储它的?我的意思是,你是传递带有值的参数还是使用ORM? - DrewbieDoo
这看起来像是一个重复的查询,因此我的建议是:https://dev59.com/GXA65IYBdhLWcg3wyR2k - DrewbieDoo

6

我知道这是一个旧帖子,但对于所有新手来说,有一种新的简化语法(Intellisense 为我突出显示了它,不确定这个功能有多新,但我猜测是 .NET 5.0)。

DateTime date = DateTime.Now;
string createdDate = $"{date:yyyy-MM-dd}";

也许在这个例子中看起来并不简化,但是当连接一条长消息时,它确实非常方便。

2

GetDateTimeFormats 可以将 DateTime 解析为不同的格式。例如,转换为 "yyyy-MM-dd" 格式。

SomeDate.Value.GetDateTimeFormats()[5]

GetDateTimeFormats


0

试试这个!

DateTime dt = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Ticks)

-1

无文化差异的方式,最佳实践:

DateTime.ToString("yyyy-MM-dd", CultureInfo.InvariantCulture)

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