【问题标题】:In .NET, how do I get the order of YYYY, MM and DD for a given culture在 .NET 中,如何获取给定文化的 YYYY、MM 和 DD 的顺序
【发布时间】:2025-12-04 00:15:02
【问题描述】:

设计一个独立于文化的生日输入,包括三个选项:年、月和日。

在 .NET 中,如何为给定的文化获得三者的正确显示顺序,即:

┌─────────────┬─┐  ┌──────────────┬─┐  ┌────────────┬─┐
│ Select year │v│  │ Select month │v│  │ Select day │v│  
└─────────────┴─┘  └──────────────┴─┘  └────────────┴─┘

┌─────────────┬─┐  ┌──────────────┬─┐  ┌────────────┬─┐
│ Select day  │v│  │ Select month │v│  │ Select year│v│  
└─────────────┴─┘  └──────────────┴─┘  └────────────┴─┘

┌─────────────┬─┐  ┌──────────────┬─┐  ┌────────────┬─┐
│ Select month│v│  │ Select day   │v│  │ Select year│v│  
└─────────────┴─┘  └──────────────┴─┘  └────────────┴─┘

* 更新 * 感谢大家的回答,让我想出了这个小功能:

  Public Function GetDateElementAtPos(ByVal pos As Integer) As String
    Return Mid(Me.myCultureInfo.DateTimeFormat.ShortDatePattern.Split(Me.myCultureInfo.DateTimeFormat.DateSeparator)(pos), 1, 1).ToLower
  End Function

其中myCultureInfo 表示已初始化的Globalization.CultureInfo。我是这样使用的:

Dim s as new stringbuilder
For i As Integer = 0 To 2
  Select Case GetDateElementAtPos(i)
    Case "y"
      s.append(**year select html goes here**)
    Case "m"
      s.append(**month select html goes here**)
    Case "d"
      s.append(**day select html goes here**)
  End Select
Next 

【问题讨论】:

  • 很高兴您找到了 Muleskinner 的解决方案,如果这是针对 Web 应用程序的,请确保您使用 CurrentUICulture,否则您将返回 IIS 服务器的文化。
  • @Tony Leeper 是的,它适用于 web 应用程序,是的,我知道谢谢。它用于用户授权和用户选择自己的文化

标签: .net date cultureinfo


【解决方案1】:

给你:

CultureInfo c = ....;
var dtf = c.DateTimeFormat;
var fs = dtf.ShortDatePattern;

【讨论】:

    【解决方案2】:

    使用 CurrentUICulture。例如

    CultureInfo.CurrentUICulture.DateTimeFormat.ShortDatePattern
    

    会给你模式,然后你需要根据显示顺序来计算。

    【讨论】:

    • 谢谢,很好的答案 - 几分钟前就被接受了
    最近更新 更多