You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

日语环境下DateTime.ParseExact抛出System.FormatException问题求助

DateTime格式化/解析抛出System.FormatException的原因分析

核心原因

  • 写入DateTime字符串时未指定文化,默认使用系统当前区域设置(日语环境),导致自定义格式中的分隔符被替换:
    • 自定义格式字符串"yyyy-MM-dd HH-mm-ss"里的-属于非转义的分隔符占位符,会被当前文化的DateSeparator(日语环境为/)和TimeSeparator(日语环境为:)替换,最终写入的字符串实际格式为yyyy/MM/dd HH:mm:ss。
  • 解析时使用CultureInfo.InvariantCulture,该文化的日期分隔符是-、时间分隔符是:,解析器期望字符串格式为yyyy-MM-dd HH-mm-ss,但实际读取到的字符串格式不匹配,因此抛出System.FormatException。

验证依据

你提到传入日语文化到date.ToString(..)后一切正常,是因为此时若解析也使用日语文化(保持文化一致),解析时格式里的-同样会被替换为日语文化的分隔符,字符串与解析规则匹配,因此不会报错。

解决方案

有两种可行的解决方式:

  1. 统一使用固定文化:写入和解析都用CultureInfo.InvariantCulture,彻底避免区域设置的影响:
    // 写入时指定InvariantCulture
    test.AccessDateTime = DateTime.Now.ToString(format, CultureInfo.InvariantCulture);
    // 解析时保持一致(你已实现此部分)
    d = DateTime.ParseExact(test.AccessDateTime, format, CultureInfo.InvariantCulture);
    
  2. 转义格式中的分隔符:将自定义格式里的-用单引号括起来,强制作为普通字符输出,不被文化分隔符替换:
    string format = "yyyy'-'MM'-'dd HH'-'mm'-'ss";
    // 写入时无需指定文化,解析时使用同一格式即可
    

内容的提问来源于stack exchange,提问作者Yosif Chumpov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 16:20:25