C#中如何不受系统日期格式影响,按dd/MM/yyyy格式保存DateTime?
问题根源与解决方案
首先得纠正一个关键误解:DateTime类型本身并不存储显示格式。它内部是用一个数值(Ticks)来表示时间的,你看到的"05-10-2018"只是系统默认格式下的显示结果,并不是这个DateTime对象的实际存储内容。
你的解析代码其实是正确的:
String MCdatetime = "10-05-2018 15:20:00"; DateTime DBdatetime = DateTime.ParseExact(MCdatetime, "dd-MM-yyyy HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None);
这段代码已经成功把输入字符串解析成了2018年5月10日15点20分的DateTime对象——你看到的"05-10-2018"只是系统用默认的MM/dd/yyyy格式显示它而已,对象本身的日期值是完全正确的。
如果你希望最终输出(比如保存到文件、显示给用户或者写入数据库时)呈现为dd/MM/yyyy HH:mm:ss格式,需要在输出/保存的环节主动格式化,而不是依赖系统默认格式:
举个例子,如果你要把这个日期转成指定格式的字符串保存:
// 转成指定格式的字符串 string formattedDate = DBdatetime.ToString("dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); // 之后可以把formattedDate保存到需要的地方
如果是写入数据库,还要注意:数据库的DateTime类型(比如SQL Server的datetime、datetime2)同样不存储格式,它只存储时间值。只要你的DBdatetime对象是正确的日期值,写入数据库后就是准确的,之后读取出来时再用ToString指定格式显示即可。
总结一下:
- ParseExact的作用是正确解析字符串到DateTime对象,你的这一步已经做对了
- 要得到指定格式的输出,必须在需要显示/保存字符串时用
ToString主动指定格式,和系统默认格式无关
内容的提问来源于stack exchange,提问作者Krishna Chaitanya
相关产品推荐
相关产品推荐

