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

如何将MM/dd/yyyy HH:ss格式字符串转为DateTime且保留原格式

解决DateTime转换与显示格式的困惑

嘿,我完全懂你现在的疑惑!这里其实有个很容易踩的坑——DateTime类型本身根本不存储“显示格式”,它本质上只是一个代表时间点的数值(比如从某个基准时间开始的Ticks数)。你看到的2018-01-28T20:00:00,只是.NET默认把DateTime转成字符串时用的ISO 8601格式,并不是这个DateTime对象本身的“样子”。

先给你吃个定心丸:你用DateTime.ParseExact的思路是对的,而且已经成功把输入字符串转换成了正确的DateTime类型!只是你误解了“显示格式”和“数据类型”的关系——转换完成后,DateTime对象的时间值是完全正确的,只是直接输出它的时候用了默认格式而已。

几个关键纠正和步骤:

  1. 先修正格式串的小错误:你的输入是01/28/2018 20:00,这里的20:00是「小时:分钟」,所以格式串应该用HH:mm,而不是你写的HH:ss(ss代表秒)。虽然这次输入的分钟是00,结果碰巧没问题,但如果输入是20:30,用HH:ss就会解析错误。

  2. 正确的转换与显示代码:

using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        string input = "01/28/2018 20:00";
        // 正确解析成DateTime类型,格式串严格匹配输入格式
        DateTime dateTime = DateTime.ParseExact(input, "MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture);
        
        // 此时dateTime已经是正确的DateTime对象,默认ToString会用ISO格式显示
        Console.WriteLine("默认显示:" + dateTime); // 输出:2018-01-28 20:00:00 或类似ISO格式
        
        // 若要以期望格式显示,调用ToString时指定格式即可
        string formattedDisplay = dateTime.ToString("MM/dd/yyyy HH:mm", CultureInfo.InvariantCulture);
        Console.WriteLine("指定格式显示:" + formattedDisplay); // 输出:01/28/2018 20:00
    }
}
  1. 核心概念再强调:
    • DateTime对象只存储时间的数值本身,不附带任何显示格式。不管用什么方式转换,只要时间值正确,这个对象就是符合要求的。
    • 所有的“显示格式”都是在把DateTime转换为字符串时控制的,核心就是用ToString(string format, IFormatProvider provider)方法指定格式规则。

所以你的需求——“仅改变数据类型,不改变显示格式”——其实要拆成两步:首先把字符串正确转成DateTime(这一步你已经做对了,只需修正格式串),然后在需要展示的时候,用指定格式把DateTime转回字符串就行啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:30:25