【问题标题】:C# datetime format that includes date/month/year and not dayC# 日期时间格式,包括日期/月/年而不是日
【发布时间】:2009-12-18 06:02:43
【问题描述】:

我想使用标准日期格式,在电脑的标准区域设置中显示日期、月份和年份。但是我只能找到“D”,其中列出了日期和日期-月份-年份。有什么方法可以从中删除一天或任何其他方式来获得我想要的输出?

DateTime date1 = new DateTime(2008, 4, 10);
Console.WriteLine(date1.ToString("D", 
                  CultureInfo.CreateSpecificCulture("en-US")));
// Displays Thursday, April 10, 2008   

注意:我不想使用自定义格式 (d MMMM yyyy),因为我希望保留订单的区域设置。

【问题讨论】:

  • 预期的输出是什么? "d" 返回你想要的所有组件。 6/15/2009 1:45:30 PM -> 6/15/2009 (en-US)
  • 对不起,我的问题应该很清楚 - 预期输出与 D 中没有“星期四”的输出相同......所以它应该是“2008 年 4 月 10 日”和 4 月 10 日的顺序而2008应该是基于本地设置的。

标签: c# datetime


【解决方案1】:

您可以将其用于您的情况:

DateTimeFormatInfo myDTFI = new CultureInfo("en-US", false).DateTimeFormat;
string str = (new DateTime(2008, 4, 10)).ToString(myDTFI.LongDatePattern.Replace("dddd", ""));

【讨论】:

  • 您可以使用Regex.Replace(myDTFI.LongDatePattern, @"dddd,?\s?", "")删除前导空格/逗号
【解决方案2】:

如果您使用的是其中一种标准格式,那么显示的内容无论如何都将取决于文化 - 因此,即使您可以找到在 en-US 中不显示星期几的内容,它也可能仍然在其他文化中显示它。

我想您可以找到文化的DateTimeFormatInfo,找到它的LongDatePattern,然后从该格式字符串中删除任何出现的单个“d”。不过这会很讨厌。

【讨论】:

    【解决方案3】:

    试试这个:

    date1.ToString("d", CultureInfo.CreateSpecificCulture("en-US"))
    

    它会返回你想要的!!

    【讨论】:

    • 我希望输出与 D 中没有“星期四”的输出相同...所以应该是“2008 年 4 月 10 日”,并且 2008 年 4 月 10 日和 2008 年的顺序应该基于本地设置。所以,不能使用“d”并且使用特定的文化对我们来说也不是一种可接受的方式:(
    【解决方案4】:

    您应该使用“d”而不是“D”来获得所需的输出。

    【讨论】:

    • 我希望输出与 D 中没有“星期四”的输出相同...所以应该是“2008 年 4 月 10 日”,并且 2008 年 4 月 10 日和 2008 年的顺序应该基于本地设置。所以,不能使用 "d" :(
    • 您似乎没有标准的格式字符串。您必须使用自定义格式字符串。但是,您可以将该格式字符串放入资源中,这样可以确保您的应用程序支持的不同文化具有适当的顺序。
    • 另一种方法是 Jon Skeet 提出的方法 - 从 DateTimeFormatInfo 中查找格式字符串,并从中删除日期名称。
    【解决方案5】:

    许多文化都有多个长日期模式,您可以从中选择第一个缺少星期几的模式:

        static void Main(string[] args)
        {
            foreach (var cultureInfo in System.Globalization.CultureInfo.GetCultures(System.Globalization.CultureTypes.AllCultures))
            {
                string longDateWithoutDayOfWeek = null;
                foreach (var pattern in cultureInfo.DateTimeFormat.GetAllDateTimePatterns('D'))
                {
                    if (!pattern.Contains("ddd"))
                    {
                        longDateWithoutDayOfWeek = pattern;
                        break;
                    }
                }
    
                bool isFallbackRequired = string.IsNullOrEmpty(longDateWithoutDayOfWeek);
                if (isFallbackRequired)
                {
                    longDateWithoutDayOfWeek = cultureInfo.DateTimeFormat.ShortDatePattern;
                }
                System.Console.WriteLine("{0} - {1} {2}", cultureInfo.Name, longDateWithoutDayOfWeek, (isFallbackRequired) ? " (short)" : string.Empty);
            }
        }
    

    或者,您可以将Windows.Globalization.DateTimeFormatting.DateTimeFormatter"day month year" 模板一起使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-25
      相关资源
      最近更新 更多