【问题标题】:C# format DateTime without year没有年份的 C# 格式 DateTime
【发布时间】:2018-08-10 12:36:13
【问题描述】:

是否可以用国际化的数字表示来格式化没有年份和月份的 DateTime?

例如new DateTime(2018, 8, 10)(今天)

一方面,我们有“d”代表10.08.2018(德语)或2018/08/10(日语)。

另一方面,我们有“M”表示10. August(德语)或August 10(美国英语)

但我想要的是10.08.(德语)、08/10(日语)、8/10(美国英语)、10/08(英语)

【问题讨论】:

  • @mjwills 谢谢,但据我所知,那些不是国际化的(这是一个词吗?)我必须自己给出顺序和分隔符。
  • 谢谢,我也不知道,这就是我问的原因。
  • 另见DateTimeFormatInfo——没有像“DayBeforeMonth”这样的属性可以利用。所有类似的特定模式都是单独设置的。 -- 你可以做的就是获取ShortDatePattern,然后自己测试d是否在M之前,然后准备好自定义格式。请注意,"/" 应自动替换为特定于文化的DateSeparator
  • 看来我要么需要为它构建一些复杂的逻辑,要么需要告诉设计师他们需要为“M”或“d”规划更多空间。

标签: c# datetime internationalization date-formatting


【解决方案1】:

也许您可以从DateTimeFormatInfo 中取出ShortDatePattern 并去掉yyyy?

您必须获得一点创意才能删除分隔符。

替换链

.Replace(DateFormatInfo.DateSeparator+"yyyy")
.Replace("yyyy"+DateFormatInfo.DateSeparator)

正则表达式可以解决问题^y+[^0-9A-Za-z]+|[^0-9A-Za-z]+y+$

  string[]  cultures = { "en-US", "ja-JP", "fr-FR" };
  DateTime date1 = new DateTime(2011, 5, 1);

  Console.WriteLine(" {0,7} {1,19} {2,10}\n", "CULTURE", "PROPERTY VALUE", "DATE");

  foreach (var culture in cultures) {
     DateTimeFormatInfo dtfi = CultureInfo.CreateSpecificCulture(culture).DateTimeFormat;
     Console.WriteLine(" {0,7} {1,19} {2,10}", culture, 
                       dtfi.ShortDatePattern, 
                       date1.ToString("d", dtfi));
  }

CULTURE      PROPERTY VALUE       
en-US            M/d/yyyy  
ja-JP          yyyy/MM/dd 
fr-FR          dd/MM/yyyy 

发件人:https://docs.microsoft.com/en-us/dotnet/api/system.globalization.datetimeformatinfo.shortdatepattern?view=netframework-4.7.2

【讨论】:

  • 如何去掉年份?因为您必须知道日期分隔符是在年份之前还是之后
  • 嗯...dtfi.ShortDatePattern.Replace("yyyy", "").Trim("/") 如果DateSeparator".",则在末尾再次添加"/"? -- 脆弱且可能容易出错,但对于标准用例来说可能“足够好”......
  • 添加了一个可能的正则表达式,当然你必须测试
  • DateFormatInfo.DateSeparator 可用于替换.Replace(DateFormatInfo.DateSeparator+"yyyy").Replace("yyyy"+DateFormatInfo.DateSeparator)
  • 我刚试过,@Corak 的解决方案不适用于 DateSeparator "-" 或 " ",但应该用 "(yyyy[ /.\-])|([ / .\-]yyyy)" 正则表达式
猜你喜欢
  • 2017-05-20
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-22
  • 2018-07-16
相关资源
最近更新 更多