12

我知道如何将 a 格式化DateTimeString. 可能有很多方法可以将 a 格式化DateTime为 a String,我发现很少有与DateTime格式化相关的问题。

但我发现并尝试了两种方法:

  1. GetDateTimeFormats()
  2. ToString("MM/dd/yyyy")

我试过这段代码:

public static class DateTimeFormates
{
    public static string FormatMyDate(this DateTime DT)
    {
        // My Actual Date Time Comes in this Format
        //8/23/2013 12:43:12 PM

        // I'm expecting Format like below

        String FormatWayOne = DT.GetDateTimeFormats()[3];
        //08/23/2013

        String FormatWayTwo = DT.ToString("MM/dd/yyyy");
        //08/23/2013

        return FormatWayOne;
    }
}

我有一个Global带有Global将 a 格式化DateTimeString. 但是在这里我想知道哪种方法是最佳实践以便我可以使用它?该方法在整个应用程序中被调用。

4

6 回答 6

13

GetDateTimeFormats不是替代品,ToString反之亦然。如果您知道您想要什么格式,则无需调用GetDateTimeFormats. 除了使用起来更清晰之外ToString,该文件说明了GetDateTimeFormats这一点(强调我的)

由于此方法使用文化敏感数据,因此您不应假定对该方法的多次调用将返回相同的数据。如果当前文化发生变化、用户覆盖个别文化设置或系统文化数据发生更新,则此方法返回的数据可能会发生变化。

这可能会破坏您的代码,因为在另一种文化中运行时,第三个元素可能是别的东西。

通过使用 ToString,您可以避免遍历所有日期格式(因此效率更高),并且您可以更清楚地了解您喜欢的格式,同时确保返回的格式是您想要的格式。

于 2013-08-23T07:43:40.260 回答
8

ToString 更清晰,而且它不使用在下一个框架版本/另一种文化中可能不起作用的幻数。使用ToString().

于 2013-08-23T07:38:02.487 回答
5

哪个是良好实践或最佳方式

两者都适合自己的需求。

这两种方式的区别?

获取日期时间格式()

将此实例的值转换为标准日期和时间格式说明符支持的所有字符串表示形式。这意味着这是一项昂贵的操作,并且每次获取第三个元素可能会给您带来不同的结果。您不需要转换为所有格式,为什么要这样做?

字符串()

使用指定格式将当前 DateTime 对象的值转换为其等效的字符串表示形式。

有什么建议或想法吗?

作为第二种方法(ToString)仅转换为您需要的格式并且更具可读性。因此优选。然而,如果您使用第一种方法,当您只需要一种格式时,您将转换为大约 100 种格式。

于 2013-08-23T07:38:59.597 回答
3

我只喜欢ToString(format)版本。但不是您作为示例显示的格式。它可以让你了解整个文化。让我们看一下下面的例子。

    DateTime now = DateTime.Now;

    string fmt1 = now.ToString("MM/dd/yyyy"); // MM/dd/yyyy
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us")
    { 
        DateTimeFormat=
        {
            DateSeparator = "-"
        }
    };
    string fmt1a = now.ToString("MM/dd/yyyy"); // MM-dd-yyyy (you're in trouble when you want to deserialize)

    string fmt2 = now.ToString("MMddyyyy"); // MMddyyyy
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us")
    {
        DateTimeFormat =
        {
            DateSeparator = "-"
        }
    };
    string fmt2a = now.ToString("MMddyyyy"); and // MMddyyyy always

我不打算在这里谈论,GetDateTimeFormats因为它是一个矫枉过正。

想知道你说的时候怎么fmt1a能回来?因为是用于表示当前文化的特殊字符。MM-dd-yyyyMM/dd/yyyy/DateTimeFormatInfo.DateSeperator

因此,我建议您使用自定义格式而不/用于序列化和任何其他 UI 格式。

于 2013-08-23T07:54:46.730 回答
2

如果您只想要日期并且如我所见,文化格式是正确的,只需使用日期时间方法 ToShortDateString

MyDateTime.ToShortDateString();

但是在扩展方法中使用它没有任何意义。如果要将任何格式的任何日期转换为始终以 MM/dd/yyyy 显示,则应首先设置文化和调用方法。

在此处查看正确的代码以使用http://msdn.microsoft.com/es-es/library/system.datetime.toshortdatestring.aspx

于 2013-08-23T08:02:23.027 回答
2

我已经使用 .ToString(format) 多年了,它从来没有让我失望过。您可以使用内置格式,也可以自定义自己的格式。

于 2013-08-23T07:45:38.913 回答