C#中DateTime类型日期格式转换问题求助
问题分析与解决方法
首先要明确一个核心点:DateTime类型本身不存储任何显示格式,它本质是一个代表时间点的数值(类似时间戳)。你看到的不同格式,只是把它转换成字符串显示时,根据指定规则或系统默认文化生成的结果。
你之前的代码做了无意义的操作:把DateTime转成指定格式的字符串,再解析回DateTime——这步完全没用,解析后的DateTime和DateTime.Now是同一个时间值,只是用Console.WriteLine(time)输出时,系统默认用你的美式区域格式显示,所以看起来和预期不符。
正确做法
不需要修改DateTime变量本身(也没法改,格式是显示层面的事),直接在需要输出/使用指定格式的时候,调用ToString并传入格式参数即可:
using System.Globalization; // 保留DateTime类型变量 DateTime currentTime = DateTime.Now; // 以目标格式输出 Console.WriteLine(currentTime.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture)); // 若需在其他场景使用该格式的字符串,同样直接ToString即可 string formattedStr = currentTime.ToString("yyyy/MM/dd HH:mm:ss", CultureInfo.InvariantCulture);
原代码输出不符预期的原因
formattedDate是你指定格式的字符串,所以输出正确;time是解析后的DateTime变量,Console.WriteLine(time)会自动用系统默认的美式区域格式(M/dd/yyyy h:mm tt)转换为字符串输出,所以看起来和原时间格式一致,但time和DateTime.Now本质是同一个时间值。
内容的提问来源于stack exchange,提问作者Deák Attila
相关产品推荐
相关产品推荐

