为何DateTime转换后日期不符?日期选择器日期格式转换求助
问题分析与解决办法
哦,我一眼就发现问题所在啦!你这里踩了一个DateTime格式字符串里很容易混淆的小坑:
你在ParseExact里用的格式字符串是"dd/mm/yyyy",但这里的小写mm代表的是分钟,而不是月份!大写的MM才是用来表示两位数字的月份的。
正因为这个格式错误,系统把你输入的"25/04/2018"里的04当成了分钟数,月份则默认取了1月(也就是01),所以才会得到25/01/2018 12:04:00 AM这个不符合预期的结果。
正确的代码实现
只需要把格式字符串里的mm改成MM就可以解决问题了,完整代码如下:
string tbdate = textboxdate.Text; DateTime lastdate = DateTime.ParseExact(tbdate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture); string newFormat = lastdate.ToString("yyyy-MM-dd");
额外小提示
如果想要让代码更健壮,避免因为输入格式不匹配导致的异常,可以考虑使用DateTime.TryParseExact方法,示例如下:
string tbdate = textboxdate.Text; if(DateTime.TryParseExact(tbdate, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out DateTime lastdate)) { string newFormat = lastdate.ToString("yyyy-MM-dd"); // 这里处理转换成功后的逻辑 } else { // 处理输入格式不正确的情况 }
内容的提问来源于stack exchange,提问作者Anita Mathew
相关产品推荐
相关产品推荐

