【问题标题】:Trying to convert string to datetime in a different format than the string尝试以与字符串不同的格式将字符串转换为日期时间
【发布时间】:2011-06-09 20:20:00
【问题描述】:

所以我必须将 (MM-dd-yyyy) 格式的日期转换为 (dd-MMM-yyyy)。我最终做的是这个......

string strProvisionalDate = "04-22-2001";
string strFormat = "MM-dd-yyyy";
DateTime dtProvisional;
DateTime.TryParseExact(strProvisionalDate, strFormat, CultureInfo.InvariantCulture, DateTimeStyles.None, out dtProvisional);
string strProvisionalDateConverted = dtProvisional.ToString("dd-MMM-yyyy");
string strFormatConverted = "dd-MMM-yyyy";
DateTime dtProvisionalConverted;
DateTime.TryParseExact(strProvisionalDateConverted, strFormatConverted, CultureInfo.InvariantCulture, DateTimeStyles.None, out dtProvisionalConverted);

基本上,我将其转换为 DateTime,将其转换为我想要的格式的字符串,然后将其转换回 DateTime。它有效,但我很想问是否有更好的方法来做到这一点......它似乎不是很优雅。

edit:事实证明,在这个 dtProvisional 和 dtProvisionalConverted 最终是相同的。所以我的新问题是,如何将 MM-dd-YYYY 格式的字符串转换为 dd-MMM-yyyy 格式的 DateTime? dtProvisional 将进入 SQL 数据库,它必须是日期格式。

【问题讨论】:

  • 哦,废话,你是对的。所以这是我的后续问题...我需要 dtProvisional 的格式为“dd-MMM-yyyy”,我该怎么做?
  • 我不明白你为什么要进行最后一次 TryParseExact 调用......你已经有了那个 DateTime 对象,为什么要把它变成一个字符串,然后又回到 DateTime 对象?
  • SQL Server 中字段的数据库类型是什么? SQL Server 以类似的方式存储日期,并且相当容忍传递格式良好的日期字符串值。
  • 数据库类型为日期。客户想要 dd-MMM-yyyy 格式的所有日期。如果我向 SQL Server 传递一个字符串,例如“12-Feb-1999”,它会接受它作为日期吗?
  • 我相信,如果 SQL Server 数据类型是 Date,那么传递它的格式并不重要,客户端的格式只会在实际使用数据的任何应用程序中很重要,因为在最后,SQL Server 不存储日期格式,但是(即使在查询中)当你想改变标准格式时,你可以控制日期格式(我不知道 SQL Server 是否有可配置的标准格式与否)。

标签: c# string datetime formatting


【解决方案1】:

DateTime 对象不将日期/时间存储为格式,而是将其存储为自纪元以来的刻度数。 dtProvisional 和 dtProvisionalConverted DateTime 作为对象应该没有区别(它们的基础值应该相同)。使用字符串格式功能将日期时间输出为字符串时,始终可以更改字符串格式。

请参阅此MSDN article 的备注部分。

我会正确格式化您的日期以便输出:

String.Format("{0:dd-MMM-yyyy}", dt);

【讨论】:

  • 对,当我想到我什至没有注意到 dtProvisional 和 dtProvisionalConverted 相同时,我非常兴奋。
  • 因为它们是相同的,你可以使用dtProvisional.ToString(format)
【解决方案2】:

正在搜索类似行的详细信息.... 这对我有用....

DateTime IncentiveDate;
    /// <summary>
    /// Input Format: ddMMyy eg. 070711
    /// Output Format: dd-MMM-YYYY eg. 07-JUL-2011
    /// </summary>
    public string IncentiveDateAsString
    {
        set
        {
            DateTime.TryParseExact(value, "ddMMyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out IncentiveDate);
        }
        get
        {
            return IncentiveDate.ToString("dd-MMM-yyyy");
        }
    }

【讨论】:

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