解决IndexOf返回-1问题,提取时间并格式化为指定日期字符串
解决路径时间提取与格式化问题
核心问题分析
你用IndexOf找png返回-1,大概率是因为路径混合了正斜杠和反斜杠,手动索引定位容易出错,不如直接用.NET的Path类处理文件路径更可靠。另外,时间字符串的提取和格式化可以通过字符串分割或正则配合DateTime类完成。
完整解决方案代码
string[] files = Directory.GetFiles(Directory.GetDirectories(savedGamesFolder)[i]); // 1. 直接提取文件名,规避路径分隔符的干扰 string fileName = Path.GetFileName(files[1]); // 2. 从文件名中拆分出时间片段:按下划线分割后取倒数第二个元素 string[] nameSegments = fileName.Split('_'); string timeRaw = nameSegments[nameSegments.Length - 2]; // 得到"2022-07-30_22-15-58" // 3. 将字符串解析为DateTime对象 if (DateTime.TryParseExact(timeRaw, "yyyy-MM-dd_HH-mm-ss", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime saveDateTime)) { // 4. 格式化为指定的月/日/年 + 12小时制时间格式 string formattedTime = saveDateTime.ToString("M/dd/yyyy hh:mm tt", CultureInfo.InvariantCulture); // 5. 赋值给Text组件 levelBtnObj.transform.GetChild(0).GetComponent<Text>().text = formattedTime; } else { // 解析失败时的兜底处理 levelBtnObj.transform.GetChild(0).GetComponent<Text>().text = "未知时间"; }
关键步骤说明
- 用Path类处理路径:
Path.GetFileName直接提取文件名,完全规避了手动找索引的各种问题,不管路径里是正斜杠还是反斜杠都能正确处理。 - 提取时间片段:通过
Split('_')分割文件名,倒数第二个元素就是目标时间字符串,格式固定时这种方式比正则更简单高效。 - 时间转换与格式化:
TryParseExact指定精确格式解析字符串,避免自动解析出错;ToString用M/dd/yyyy hh:mm tt格式输出,其中:M是单/两位月份(比如7或07)dd是两位日期yyyy是四位年份hh是12小时制的小时(22点会转为10)tt自动匹配AM/PM
灵活替代方案(正则提取)
如果文件名格式可能有变动,用正则匹配更稳妥:
Match timeMatch = Regex.Match(fileName, @"\d{4}-\d{2}-\d{2}_\d{2}-\d{2}-\d{2}"); if (timeMatch.Success) { string timeRaw = timeMatch.Value; // 后续解析和格式化步骤同上 }
内容的提问来源于stack exchange,提问作者Daniel Lip
相关产品推荐
相关产品推荐

