请求协助:将MM/DD/YYYY字符串日期转换为DD/MM/YYYY DateTime格式
解决日期字符串解析与格式转换问题
首先得先指出你代码里的几个小问题,避免编译报错:
- 变量名写错了:方法参数是
fromDate和toDate,但你代码里用了fromDates和toDates,这会导致编译错误 - 重复定义了
dDate变量,同一个作用域里不能重复声明同名变量
接下来回到你的核心需求:把格式为"03/30/2018"(MM/dd/yyyy)的字符串解析成DateTime,再输出为"30/03/2018 12:00:00 AM"(dd/MM/yyyy hh:mm:ss tt)格式的字符串(或者说确保解析后的DateTime可以正确格式化为这个样式)。
推荐方案:使用ParseExact明确指定输入格式
直接用DateTime.Parse可能会因为服务器的区域文化设置导致解析失败(比如有些地区默认是dd/MM/yyyy,这时候解析"03/30/2018"会报错,因为30不是合法的月份),所以最好用ParseExact来明确指定输入的日期格式:
public ActionResult Export(string fromDate, string toDate) { DateTime parsedFromDate; DateTime parsedToDate; // 解析fromDate:输入格式是MM/dd/yyyy if (!string.IsNullOrEmpty(fromDate)) { // 使用InvariantCulture确保解析不受系统文化影响 parsedFromDate = DateTime.ParseExact(fromDate, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture); // 如果需要输出成目标格式的字符串 string formattedFromDate = parsedFromDate.ToString("dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); // 这里可以使用formattedFromDate做后续操作 } // 解析toDate同理 if (!string.IsNullOrEmpty(toDate)) { parsedToDate = DateTime.ParseExact(toDate, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture); string formattedToDate = parsedToDate.ToString("dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); } // 后续逻辑... return View(); }
更安全的方案:使用TryParseExact避免异常
如果前端传入的日期格式可能不规范,建议用TryParseExact,这样不会因为格式错误抛出异常,而是返回布尔值告诉你解析是否成功:
public ActionResult Export(string fromDate, string toDate) { DateTime parsedFromDate; DateTime parsedToDate; if (!string.IsNullOrEmpty(fromDate)) { if (DateTime.TryParseExact(fromDate, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out parsedFromDate)) { string formattedFromDate = parsedFromDate.ToString("dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); // 解析成功,执行逻辑 } else { // 解析失败,处理错误(比如返回提示) } } if (!string.IsNullOrEmpty(toDate)) { if (DateTime.TryParseExact(toDate, "MM/dd/yyyy", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None, out parsedToDate)) { string formattedToDate = parsedToDate.ToString("dd/MM/yyyy hh:mm:ss tt", System.Globalization.CultureInfo.InvariantCulture); } else { // 处理错误 } } // 后续逻辑... return View(); }
格式说明
- 输入格式
"MM/dd/yyyy":MM代表两位月份,dd代表两位日期,yyyy代表四位年份 - 输出格式
"dd/MM/yyyy hh:mm:ss tt":dd/MM/yyyy是日/月/年,hh是12小时制的小时,mm是分钟,ss是秒,tt是AM/PM标识
这样就能准确完成你需要的日期转换啦!
内容的提问来源于stack exchange,提问作者Jen143
相关产品推荐
相关产品推荐

