【问题标题】:format datetime based on users culture根据用户文化格式化日期时间
【发布时间】:2014-02-23 11:49:31
【问题描述】:

如何根据ASP.NET-MVC 应用程序中的用户区域设置格式化日期和时间,而不用担心日期的顺序?

例如,我想拥有:

  1. 前导零 (dd) 的日期;
  2. 月份缩写三字母表 (MMM);
  3. 全年 (yyyy);
  4. 时间只是小时和分钟,都带有前导零 (HH:mm);
  5. 取决于用户是否来自美国,在时间之后显示 AM/PM;

每个国家/地区以不同的顺序显示日期。美国首先显示月份而不是天数而不是年份 (MMM/dd/yyyy)。在中国首先是年比月比日(yyyy-MMM-dd)(IIRC)。在欧洲,大多数国家/地区以这种格式显示日期:dd-MMM-yyyy。

更不用说在每个国家/地区用于分隔月、日和年的斜线/破折号了。

这当然可以通过无休止的if/elseswitch 语句来完成,但是没有更优雅的方式来做到这一点吗?

编辑这是我想出的最好的:

var cltr = System.Threading.Thread.CurrentThread.CurrentCulture;
DateTime.Now.ToString(cltr.DateTimeFormat.ShortDatePattern + " " + cltr.DateTimeFormat.ShortTimePattern)

它仅以数字显示日期。我将如何在短月份表示法中更改它但不更改顺序和分隔符等?

【问题讨论】:

  • 当它“取决于用户区域设置”时,您无法选择前导零或 12/24 小时格式。
  • 放眼大局(因此除了我可以选择或不选择),您知道我该怎么做吗?
  • @Quoter 但这是更大的图景,不是吗?

标签: c# asp.net-mvc date datetime formatting


【解决方案1】:

您可以通过 CurrentCulture 和 CurrentCultureInfo 获取用户当前使用的文化。

更多详情请见:http://msdn.microsoft.com/en-us/library/bz9tc508.aspx

【讨论】:

    【解决方案2】:

    我认为您在谈论格式问题。一旦你有了DateTime 对象,你就可以根据需要显示它。如果要将日期时间显示为美国格式,则必须在 DateTime.ToString() 方法中将 new CultureInfo("en-US") 指定为 IFormatProvider

    【讨论】:

    • 我知道那个,只是不想这样做几百次。那么有没有办法自动化new CultureInfo("en-US") 流程,而不是使用无数的if/else 语句?
    猜你喜欢
    • 2017-09-14
    • 2011-08-04
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多