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

ASP.NET Core:解决System.FormatException日期格式转换错误

解决ASP.NET Core中DateTime.ParseExact格式异常问题

问题根源

你使用的解析格式"yyyy/MM/dd"和输入字符串的格式完全不匹配:

  • 原始输入是ISO 8601格式:"2019-08-24T14:15:22Z"(包含横杠日期分隔符、T时间分隔符、完整时间部分和时区标识Z)
  • 错误信息中显示的另一种输入格式:"2023-04-09 10:59"(横杠日期分隔符、空格时间分隔符、小时分钟部分)
    这两种格式都和你指定的yyyy/MM/dd(斜杠分隔符、仅日期部分)不匹配,因此抛出System.FormatException。

解决方案

1. 解析ISO 8601格式字符串

如果输入始终是"yyyy-MM-ddTHH:mm:ssZ"格式,使用对应格式字符串解析后再转换为目标格式:

using System.Globalization;

// 解析ISO格式的字符串
DateTime expiryDate = DateTime.ParseExact(
    initializationResponse.expiry_date, 
    "yyyy-MM-ddTHH:mm:ssZ", 
    CultureInfo.InvariantCulture
);

// 转换为"yyyy-MM-dd HH:mm"格式的字符串
string formattedDate = expiryDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

2. 支持多种输入格式

如果输入可能是"yyyy-MM-ddTHH:mm:ssZ"或"yyyy-MM-dd HH:mm"两种格式,使用多格式数组解析:

using System.Globalization;

string[] inputFormats = { "yyyy-MM-ddTHH:mm:ssZ", "yyyy-MM-dd HH:mm" };
DateTime expiryDate = DateTime.ParseExact(
    initializationResponse.expiry_date, 
    inputFormats, 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None
);

string formattedDate = expiryDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);

3. 安全解析(避免异常)

使用DateTime.TryParseExact替代ParseExact,可以在解析失败时优雅处理:

using System.Globalization;

if (DateTime.TryParseExact(
    initializationResponse.expiry_date, 
    "yyyy-MM-ddTHH:mm:ssZ", 
    CultureInfo.InvariantCulture, 
    DateTimeStyles.None, 
    out DateTime expiryDate
))
{
    string formattedDate = expiryDate.ToString("yyyy-MM-dd HH:mm", CultureInfo.InvariantCulture);
    // 执行后续逻辑
}
else
{
    // 处理解析失败的情况,比如提示用户输入无效
}

关键注意事项

  • ParseExact要求输入字符串和格式字符串完全匹配,包括分隔符(横杠/斜杠/空格/T)、时间部分长度、时区标识等。
  • 使用CultureInfo.InvariantCulture避免因系统区域设置导致的格式解析差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:13:08