【问题标题】:Is there a human language that has months ordered alphabetically? [closed]有没有按字母顺序排列月份的人类语言? [关闭]
【发布时间】:2021-04-26 17:28:05
【问题描述】:

所以我喜欢 ISO 格式的日期字符串,即 2021-12-25 - 这意味着您可以应用简单的排序并且日期的顺序正确。

但有时将月份视为英语会很不错,而不是试图记住 10 月是 8 月还是 9 月或 10 月。 (也许只有我)。

所以 2021 年 12 月 25 日读起来不错但是我失去了那种排序质量 - 这个日期现在会出现在 2021 年 11 月 25 日感恩节之前。 p>

所以我想知道是否有一种人类语言可以两者兼得——在该语言的字母表中,有没有一种语言在一月出现在二月之前。例如法语在这里失败(Janvier > Fevrier)。

【问题讨论】:

  • 我投票结束这个问题,因为这不是编程
  • 您是否要切换 UI 的语言以便对日期进行排序?这有点傻。
  • P.S.使 ISO-8601 如此出色的原因在于它与语言无关。
  • 尽管这是一个奇怪的问题,但我认为与 ISO 日期的链接使它成为话题的边缘。下面的答案当然很好,并且涉及编程。我正在投票重新开放。
  • @JohnColeman ISO 通过完全消除名称并仅使用数字来完全回避这个问题。我看不出这个问题的准确答案对任何人都有用。

标签: sorting culture isodate


【解决方案1】:

好吧,让我们查询文化:对于每种文化,我们得到月份的名称并检查它们是否已排序(我们将原始名称与排序名称进行比较)。

C# 代码:

  var result = CultureInfo
    .GetCultures(CultureTypes.AllCultures)
    .Where(ci => ci.DateTimeFormat
       .MonthNames
       .Where(month => !string.IsNullOrEmpty(month))
       .Where(month => !Regex.IsMatch(month, "^M[0-9]+$"))
       .Any())
    .Where(ci => ci.DateTimeFormat
       .MonthNames
       .Where(month => !string.IsNullOrEmpty(month))
       .SequenceEqual(ci
          .DateTimeFormat
          .MonthNames
          .Where(month => !string.IsNullOrEmpty(month))
          .OrderBy(month => month)))
    .OrderBy(ci => ci.Name)
    .Select(ci => $"{ci.Name} ({ci.EnglishName})");

  Console.Write(string.Join(Environment.NewLine, result)); 

结果:

  Empty 

所以,地球上没有这样的(幸运的?)文化(至少 .Net 5 知道)

你可以试试AbbreviatedMonthNamesMonthGenitiveNames,但是很可惜:输出也是空的。

【讨论】:

  • 看看哪种文化最接近会很有趣,与理想的距离是通过排序所需的交换次数来衡量的。
猜你喜欢
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-14
  • 1970-01-01
相关资源
最近更新 更多