将DateTime转换为"yyyymmdd"格式时代码报错,求排查问题
你的代码存在两个关键问题,直接导致了解析错误
1. 格式字符串用错了:mm是分钟,不是月份
你写的格式"yyyymmdd"里,小写的mm表示分钟,而月份需要用大写的MM。正确的目标格式应该是"yyyyMMdd"——这是引发格式不匹配的核心原因。
2. 做了完全冗余且错误的操作
你的deliveryDate已经是一个DateTime对象了,根本不需要先把它转成默认格式的字符串(结果是"3/31/2018 12:00:00 AM"),再用ParseExact去解析。这个默认字符串和你指定的"yyyymmdd"格式完全不匹配,自然会抛出“无法识别为有效DateTime”的错误。
正确的写法
如果你的需求是得到"yyyyMMdd"格式的字符串,直接调用DateTime的ToString方法即可:
DateTime deliveryDate = myRepository.DeliveryDate; // 值为3/31/2018 12:00:00 AM string formattedDeliveryDate = deliveryDate.ToString("yyyyMMdd", CultureInfo.InvariantCulture); // 结果会是 "20180331"
如果确实需要把这个格式的字符串再转回DateTime(虽然完全没必要,因为原对象已经是DateTime了),也要先正确格式化再解析:
DateTime deliveryDate = myRepository.DeliveryDate; string formattedStr = deliveryDate.ToString("yyyyMMdd", CultureInfo.InvariantCulture); DateTime parsedDate = DateTime.ParseExact(formattedStr, "yyyyMMdd", CultureInfo.InvariantCulture, DateTimeStyles.None);
记住:如果只是要格式化日期,直接用ToString就够了,别做多余的解析操作。
内容的提问来源于stack exchange,提问作者H.Nahio
相关产品推荐
相关产品推荐

