C#中字符串转DateTime:如何去除时间仅保留指定日期格式?
解决DateTime转换后保留纯日期的问题
首先得明确一个关键点:.NET里的DateTime类型本身是一定会包含日期和时间信息的,你看到的5/7/2018 12:00:00 AM只是它的默认显示格式,并不是变量存储的本质内容。如果想要只关注日期部分,或者输出成2018-05-07的格式,可以用下面几种方法:
方法1:提取DateTime的日期部分
转换后调用Date属性,这样得到的DateTime对象时间部分会被自动设置为午夜0点(00:00:00),但核心的日期信息是纯净的:
string stringDate = "2018-05-07"; DateTime todayDate = Convert.ToDateTime(stringDate).Date;
后续你使用这个变量时,时间部分不会干扰日期相关的逻辑。
方法2:格式化输出为指定日期字符串
如果你的需求是把日期显示成2018-05-07的格式,而不是修改DateTime变量本身,那么在输出或使用的时候用格式化字符串即可:
string stringDate = "2018-05-07"; DateTime todayDate = Convert.ToDateTime(stringDate); // 直接输出格式化后的内容 Console.WriteLine(todayDate.ToString("yyyy-MM-dd")); // 或者把格式化后的字符串存起来备用 string formattedDateStr = todayDate.ToString("yyyy-MM-dd");
方法3:精确转换避免文化差异问题
如果你的系统可能涉及不同区域文化,建议用ParseExact来严格按照指定格式转换,避免因区域设置导致的转换错误:
using System.Globalization; string stringDate = "2018-05-07"; DateTime todayDate = DateTime.ParseExact(stringDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); // 同样可以加上.Date提取纯日期部分 DateTime onlyDate = todayDate.Date;
进阶方案:使用DateOnly类型(.NET 6+)
如果你的项目基于.NET 6或更高版本,推荐直接使用DateOnly类型——它专门用于存储日期,完全没有时间部分,完美匹配你的需求:
using System.Globalization; string stringDate = "2018-05-07"; DateOnly todayDate = DateOnly.ParseExact(stringDate, "yyyy-MM-dd", CultureInfo.InvariantCulture); // 直接输出就是标准的日期格式 Console.WriteLine(todayDate.ToString("yyyy-MM-dd"));
内容的提问来源于stack exchange,提问作者Prashant Patel
相关产品推荐
相关产品推荐

