Unity中DateTime格式MM/dd/yyyy转dd/MM/yyyy及解析报错解决问询
解决方案
报错原因
FormatException报错是因为默认的DateTime.Parse/Convert.ToDateTime方法会依赖运行环境的系统区域文化设置解析字符串,你存储的固定格式日期和当前系统默认日期格式不匹配就会触发解析失败。另外注意你贴出的存储代码用的是**冒号(:)**分隔年月日,和你描述的斜杠(/)格式不一致,解析时的格式字符串需要和实际存储的格式完全匹配。
具体实现步骤
首先需要在脚本顶部引入命名空间:
using System.Globalization;
1. 精确解析存储的日期字符串
使用DateTime.ParseExact(或更安全的TryParseExact)做固定格式解析,完全规避区域文化影响:
// 从存储中读取到的日期字符串,示例值对应你原存储代码生成的格式:"05:21:2024" string storedDateStr = "你读取到的日期字符串"; // 解析格式要和存储时的格式完全一致 // 如果实际存储是斜杠分隔的"MM/dd/yyyy",就把第二个参数改为"MM/dd/yyyy" DateTime parsedDate = DateTime.ParseExact(storedDateStr, "MM:dd:yyyy", CultureInfo.InvariantCulture);
2. 转换为目标格式字符串
直接对解析成功的DateTime对象做格式化即可,原有时间信息会完整保留:
// 输出格式为"dd/MM/yyyy",示例结果:"21/05/2024" string targetDateStr = parsedDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture);
健壮性优化版本
使用TryParseExact避免非法字符串导致程序崩溃:
string storedDateStr = "你读取到的日期字符串"; DateTime parsedDate; if (DateTime.TryParseExact( storedDateStr, "MM:dd:yyyy", // 匹配实际存储格式 CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedDate)) { // 解析成功,输出目标格式 string targetDateStr = parsedDate.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture); // 你的后续业务逻辑 } else { // 解析失败兜底逻辑,例如输出日志、使用默认日期 UnityEngine.Debug.LogError("存储的日期字符串格式非法"); }
注意事项
- 格式字符串大小写敏感:
MM代表两位月份、mm代表两位分钟、dd代表两位日期、yyyy代表四位年份,不要写错。 - 所有日期解析、格式化操作都指定
CultureInfo.InvariantCulture,可以彻底规避不同设备区域设置不同导致的格式异常,适合多地区发布的Unity项目。
内容的提问来源于stack exchange,提问作者Aimbot Studios
相关产品推荐
相关产品推荐

