【问题标题】:Changing Date format to en-us while culture is fr-ca在文化为 fr-ca 时将日期格式更改为 en-us
【发布时间】:2011-01-31 14:14:33
【问题描述】:

我正在对一个法语网站进行本地化。但是我不应该将日期格式更改为法语。即使文化设置为 fr-ca,它也必须保持 en-us 格式,即当其余内容为法语时,日期格式仍应为英语(en-us)。

【问题讨论】:

    标签: c# internationalization


    【解决方案1】:

    在我的情况下,我必须设置应用程序的语言,还要确定语言是否是从右到左的语言,还需要保持标准的日期时间格式。这就是我所做的:

    string culture = "ar-SA";  
    //Set language and culture to Arabic  
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
    Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture);
    
    //But independent of language, keep datetime format same
    DateTimeFormatInfo englishDateTimeFormat = new CultureInfo("en-CA").DateTimeFormat;
    Thread.CurrentThread.CurrentCulture.DateTimeFormat = englishDateTimeFormat;
    

    【讨论】:

    • 非常感谢,你拯救了我的一天。无论如何,我编辑了您的答案以重置 UI 文化中的日期时间格式。祝你有美好的一天!
    【解决方案2】:

    要更改日期的格式,您可以create a custom CultureInfo,基于现有的 CultureInfo(在您的情况下为“fr-CA”),仅修改日期格式。我在这方面没有任何经验,但链接的文章和this article 解释了它是如何完成的。应该不会太难吧。

    我想将 System.Threading.Thread.CurrentThread.CurrentCulture 设置为您的自定义 CultureInfo 的一个实例(例如在 Page.Load 事件中)应该可以完成这项工作。


    或者,使用 CultureInfo 类基于每个字符串指定文化:

    CultureInfo culture = new CultureInfo("en-US");
    

    每当您向页面写入日期时,请使用以下语法:

    myDate.ToString("d", culture);
    

    string.Format(
      culture,
      "This is a string containing a date: {0:d}",
      myDate);
    

    CultureInfo 类位于System.Globalization 命名空间中,上面的d 是输出日期的格式。 See John Sheehan's ".NET Format String Quick Reference" cheat sheet 了解有关格式字符串的更多信息。

    【讨论】:

      【解决方案3】:

      谢谢各位!!!! 似乎您的建议对我有用。 我尝试创建一种自定义文化,它扩展了 fr-ca 的功能并将其日期格式更改为 en-us。 这是代码

      CultureInfo ci = new CultureInfo("fr-ca");
      DateTimeFormatInfo dateformat = new DateTimeFormatInfo();
      dateformat.FullDateTimePattern = "dddd, mmmm dd, yyyy h:mm:ss tt";// Date format of en-us
      ci.DateTimeFormat = dateformat;
      CultureAndRegionInfoBuilder obj = new CultureAndRegionInfoBuilder("fr-ca", CultureAndRegionModifiers.Replacement);
      obj.LoadDataFromCultureInfo(ci);
      obj.Register();
      

      一旦代码注册了新的fr-ca,fr-ca的日期格式将与en-us的相同。 该代码可以在Page_Load中使用。

      【讨论】:

        【解决方案4】:

        令人惊讶的是,我得到了一个非常简单的答案。在设置 Culture 和 UICulture 时,我需要做的就是将 Culture 属性设置为始终 en-us。这将导致始终以英文显示日期格式。

        【讨论】:

          【解决方案5】:

          这是代码片段中的上述代码:

          CultureInfo ci = new CultureInfo("fr-ca"); 
          
          DateTimeFormatInfo dateformat = new DateTimeFormatInfo();
          
          
          
          dateformat.FullDateTimePattern = "dddd, mmmm dd, yyyy h:mm:ss tt";// Date format of en-us
          
          
          
          ci.DateTimeFormat = dateformat; 
          
          CultureAndRegionInfoBuilder obj = new CultureAndRegionInfoBuilder("fr-ca", CultureAndRegionModifiers.Replacement);
          
          
           obj.LoadDataFromCultureInfo(ci); 
          
          obj.Register();
          

          【讨论】:

            【解决方案6】:

            在字符串上显示日期时,请执行以下操作:

            CultureInfo ci = new CultureInfo("en-US");
            string s = dateTimeObject.ToString(ci);
            

            这是一个简化的示例,但您只需要在 DateTime 对象上做您想做的必要工作。

            【讨论】:

            • 如果我这样做,我将不得不在任何地方更改代码。这不能在全球范围内完成吗?
            • @Nadeem:可以制作自己的 CultureInfo。请参阅我的更新答案。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-30
            • 1970-01-01
            • 1970-01-01
            • 2020-06-21
            • 1970-01-01
            相关资源
            最近更新 更多