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

如何解析「二 5月 16 14:41:40 +0800 2023」为DateTimeOffset?

解决中文单字星期的DateTimeOffset解析问题

问题核心在于:zh-CN文化下的默认星期缩写是「周一、周二...周日」,而你的字符串中是单字形式的「二」,导致默认解析逻辑无法识别。以下是两种可行的解决方法:

方法一:替换单字星期为标准缩写

先将字符串中的单字星期替换为zh-CN文化认可的标准缩写,再使用常规解析方法:

string lastLogin = "二 5月 16 14:41:40 +0800 2023";

// 建立单字星期到标准缩写的映射
var weekMapping = new Dictionary<string, string>
{
    {"日", "周日"}, {"一", "周一"}, {"二", "周二"},
    {"三", "周三"}, {"四", "周四"}, {"五", "周五"}, {"六", "周六"}
};

// 替换字符串开头的单字星期
foreach (var pair in weekMapping)
{
    if (lastLogin.StartsWith(pair.Key))
    {
        lastLogin = lastLogin.Replace(pair.Key, pair.Value);
        break;
    }
}

// 执行解析
DateTimeOffset result = DateTimeOffset.Parse(lastLogin, new CultureInfo("zh-CN"), DateTimeStyles.None);

方法二:自定义DateTimeFormatInfo支持单字星期

直接修改文化信息中的星期缩写规则,让解析逻辑识别单字形式:

string lastLogin = "二 5月 16 14:41:40 +0800 2023";

// 基于zh-CN创建自定义文化信息
var customCulture = new CultureInfo("zh-CN");
// 将星期缩写替换为单字数组
customCulture.DateTimeFormat.AbbreviatedDayNames = new[] {"日", "一", "二", "三", "四", "五", "六"};

// 使用自定义文化和对应格式字符串解析
DateTimeOffset result = DateTimeOffset.ParseExact(
    lastLogin, 
    "ddd MMM d HH:mm:ss zzz yyyy", 
    customCulture, 
    DateTimeStyles.None
);

补充说明

  • 格式字符串中的ddd对应星期缩写,修改后的AbbreviatedDayNames会让ddd匹配单字星期;
  • MMM对应中文月份缩写「5月」,zh-CN文化默认支持该格式,无需额外修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:39:56