【问题标题】:How to customize datetime format or to convert DateTime to String with required format如何自定义日期时间格式或将日期时间转换为所需格式的字符串
【发布时间】:2009-12-09 05:18:06
【问题描述】:

我有一个 24 小时格式的 DateTime 字符串 .. "2009-12-31T23:59:59"
我想要这种格式..“12/31/2009 23:59:59”即:“MM/DD/YYYY HH:MM:SS”

当我试图将其转换为字符串时,我得到“2009 年 12 月 31 日下午 11:59:59”.. 虽然我可以为 字符串操作 编写代码 .. 它似乎没有成为高效的..此外,当我有像“2009-1-1T1:19:15”这样的日期时间值时,情况变得最糟糕..在这里,由于字符串长度在变化,我不能甚至使用 substring() 和 convert.ToInt() 跟踪小时和月份的值..

我正在使用 Visual Studio 2005,当我写这个时,它会抛出错误说“无法将 DateTime 隐式转换为字符串”陈述: ..

result = Convert.ToString(dateValue);

我简化了我的问题: 有什么方法可以将“yyyy-mm-ddThh:mm:ss”格式转换为“mm/dd/yyyy hh:mm:ss”..它必须在visual studio 2005中工作..

【问题讨论】:

    标签: c#


    【解决方案1】:

    您需要使用 ParseExact 将其恢复为日期时间:

    string FormatDateTime(string dateString) {
        DateTime dt = DateTime.ParseExact(dateString, "yyyy-MM-ddTHH:mm:ss", DateTimeFormatInfo.InvariantInfo, DateTimeStyles.None);
        return dt.ToString("MM/dd/yyyy HH:mm:ss");
    }
    

    这应该会为您提供所需的输出。通过使用 InvariantInfo,它将确保您的系统设置不会将斜杠替换为您当前在系统中定义的任何内容。我想我在 cmets 中看到你有一个“。”用作日期分隔符。

    http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.invariantinfo.aspx

    【讨论】:

    • 不需要写 ParseExact,只需要在语句 dateVaule.toString(date_format) 中给出日期格式 .. 像这样 "MM'/'dd'/'yyyy' 'HH': 'mm':'ss" ..这就够了......邪恶是正确的..
    • dateValue 是什么意思?您在原始帖子中没有提到任何内容。你真的需要学习如何提问。您可能没有意识到,但是如果您只让普通 Parse 尝试找出日期格式,那么最初向解析器提供它所花费的时间比提供它要长得多。这就是为什么有两种不同的方法。 Second Unholy 把他的整个事情都建立在他的机器上,这似乎是在运行一个非标准的设置。但是你不应该破解自己的格式,“/”是日期分隔符,并且你希望它始终是“/”,使用支持它的文化。
    【解决方案2】:

    类似:

    string s = DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss");
    

    【讨论】:

    • 当我尝试你的代码时,我得到以下信息: DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss") "12.09.2009 10:26:09"
    • 不,他说得对。您系统中的默认分隔符已定义为“。”代替 ”/”。查看此属性:msdn.microsoft.com/en-us/library/…
    • 是的,因此我们应该使用 "MM'/'dd'/'yyyy' 'HH':'mm':'ss"。
    • 实际上不,您应该使用 InvariantInfo 格式化程序,而不是将字符串与带引号的日期分隔符一起破解。
    • 阅读文档以了解有关日期分隔符如何工作的更多信息msdn.microsoft.com/en-us/library/…
    【解决方案3】:
    string FormatDateString(string date_string)
    {
        DateTime date;
        if (!DateTime.TryParse(date_string, out date)
        {
            return null;
        }
    
        return date.ToString("MM/dd/yyyy HH:mm:ss");
    }
    

    【讨论】:

    • 邪恶的,你介意解释一下撇号在你的格式中的意义吗?我不熟悉这个。谢谢 :)
    • 来自 msdn:“' - 表示带引号的字符串(撇号)。显示两个撇号 (') 字符之间的任何字符串的文字值。” 当您使用撇号时,您明确定义分隔符。
    【解决方案4】:

    是这样的:XmlConvert.ToDateTime(yourDate, "yyyy-MM-dd\Thh:mm:ss").ToString("MM/dd/yyyy HH:MM:SS")

    点击这里了解更多信息:

    http://msdn.microsoft.com/en-us/library/kzk5c6y9.aspx

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2014-08-10
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多