C#日期格式问题:如何生成英、美格式的DateTime对象
你误解了DateTime对象的本质哦!
首先得给你掰明白一个核心点:DateTime对象本身是不存储“格式”的,它就像一个时间的“本质”——内部存的是从某个基准时间开始的滴答数,不管是英国还是美国的显示方式,它代表的都是同一个时间点。你想要“英国格式的DateTime”或者“美国格式的DateTime”,这个思路本身就错啦😅
咱们来拆解你的代码问题:
- 你先把
dtpStartDate.Value.Date转成字符串,再用ParseExact转回去DateTime,这完全是多此一举!直接用dtpStartDate.Value就能拿到正确的DateTime对象,根本不用绕一圈字符串解析。 - 你用
Convert.ToDateTime(dtUK, new CultureInfo("en-US"))试图得到“美国格式的DateTime”,但这个操作其实啥也没改变——因为输入已经是DateTime对象了,转换后还是同一个时间点,文化信息只在解析字符串时有用,对DateTime对象本身无效。
那正确的做法应该是怎样的?
其实你真正需要的应该是:一个统一的DateTime对象,然后根据需要把它转换成英国格式或美国格式的字符串。代码示例如下:
// 直接从DateTimePicker获取时间,这是唯一需要的DateTime对象 DateTime targetDate = dtpStartDate.Value; // 转换成英国格式的字符串(dd/MM/yyyy 时:分:秒) string ukDateString = targetDate.ToString("dd/MM/yyyy HH:mm:ss", new CultureInfo("en-GB")); // 转换成美国格式的字符串(MM/dd/yyyy 时:分:秒) string usDateString = targetDate.ToString("MM/dd/yyyy HH:mm:ss", new CultureInfo("en-US"));
如果你的需求真的是要解析不同格式的字符串到DateTime(比如从用户输入的不同格式字符串获取时间),那才需要用到ParseExact指定格式,但从DateTimePicker拿时间的话,直接用Value就好啦。
总结一下:DateTime是时间的“本质”,格式是给人看的字符串形式——别再纠结创建不同格式的DateTime对象啦,拿到正确的时间对象后,按需转字符串就搞定了!
内容的提问来源于stack exchange,提问作者Rich
相关产品推荐
相关产品推荐

