65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET Framework 文化及其特定格式与 SQL Server 语言实用工具的映射

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.55/5 (5投票s)

2013年5月19日

CPOL

3分钟阅读

viewsIcon

32835

downloadIcon

834

用于 .NET Framework 文化及其特定格式与 SQL Server 语言映射的实用工具。CultureInfo、日期格式、数字格式、货币格式、百分比格式、无穷大格式等。

引言

本文面向在 Web 应用程序或数据库级别使用不同语言的人员。在这里,您可以找到不同语言的DateTimeNumberCurrencyPercent 等的特定文化格式。本文基于 .NET Framework 4.5 和 SQL Server 2012。

我已投入时间和精力在我的所有文章中,请不要忘记为我的投票建议和反馈,以提高本文和即将发表文章的质量。感谢您的阅读。

背景

我最近发表了一篇名为“.NET Framework 文化及其特定格式与 SQL Server 语言的映射。”的文章。阅读该文章后,我的一个朋友建议了一个简单的实用工具,可以根据特定文化提供所需的格式。这就是我实现他的建议的方式。

Using the Code

我创建了一个简单的表单,其中包含一些标签控件和文本框控件来显示特定格式的数据,我没有命名大多数控件。(我没有在这个实用工具代码中使用所有最佳实践。)

private void Form1_Load(object sender, EventArgs e)
{
    LoadCultureList();
    loadDefaultData();
} 

Form1_Load 调用两种方法来加载此实用工具中使用的文化列表和默认值。

LoadCultureList() 方法定义如下所示

private void LoadCultureList()
{
    CultureInfo[] cultures = CultureInfo.GetCultures(CultureTypes.SpecificCultures);
 
    var qry = from c in cultures
                orderby c.DisplayName ascending
                select new
                {
                    CultureCode = c.Name,
                    DisplayName = c.DisplayName
                };
 
    comboBox1.DisplayMember = "DisplayName";
    comboBox1.ValueMember = "CultureCode";
    var datasource = qry.ToList();
    datasource.Insert(0, new { CultureCode = "", DisplayName = "--Select--" });
    comboBox1.DataSource = datasource;
} 

GetCultures 将所有可用的文化分配给“cultures”变量,并使用 linq 按displayname对其进行排序。然后,我使用排序后的列表将文化列表绑定到combobox

private void button1_Click(object sender, EventArgs e)
{
    loadFormats();
} 

loadFormats(); 方法用于在适当的控件中加载特定文化的 data。此方法将在加载按钮或刷新按钮的onClick事件中调用。方法定义如下所示

private void loadFormats()
{
    try
    {
        DateTime date = DateTime.Now;//Convert.ToDateTime(textBox57.Text);
        Int64 currency = Convert.ToInt64(textBox56.Text);
        Int64 number = Convert.ToInt64(textBox55.Text);
        Int64 percent = Convert.ToInt64(textBox54.Text);
        string cultureCode = "en-US";
        if (textBox1.Text != "")
        {
            cultureCode = textBox1.Text;
        }
        else
        {
            cultureCode = comboBox1.SelectedValue.ToString();
        }
 
        CultureInfo culture = new CultureInfo(cultureCode);
 
        System.Threading.Thread.CurrentThread.CurrentCulture = culture;
 
        //DateTime
        textBox2.Text = culture.DateTimeFormat.Calendar.ToString().Replace
                        ("System.Globalization.", "");
        textBox3.Text = culture.DateTimeFormat.NativeCalendarName;
        textBox4.Text = culture.DateTimeFormat.YearMonthPattern;
        label64.Text = date.ToString(culture.DateTimeFormat.YearMonthPattern);
        textBox5.Text = culture.DateTimeFormat.MonthDayPattern;
        label65.Text = date.ToString(culture.DateTimeFormat.MonthDayPattern);
        textBox13.Text = culture.DateTimeFormat.CalendarWeekRule.ToString();
        textBox14.Text = culture.DateTimeFormat.FirstDayOfWeek.ToString();
        textBox15.Text = culture.DateTimeFormat.DateSeparator;
        label68.Text = date.ToShortDateString();
        textBox16.Text = culture.DateTimeFormat.TimeSeparator;
        label69.Text = date.ToShortTimeString();
        textBox17.Text = culture.DateTimeFormat.AMDesignator;
        textBox18.Text = culture.DateTimeFormat.PMDesignator;
        textBox19.Text = culture.DateTimeFormat.ShortDatePattern;
        label72.Text = date.ToShortDateString();
        textBox20.Text = culture.DateTimeFormat.LongDatePattern;
        label73.Text = date.ToLongDateString();
        textBox21.Text = culture.DateTimeFormat.ShortTimePattern;
        label74.Text = date.ToShortTimeString();
        textBox22.Text = culture.DateTimeFormat.LongTimePattern;
        label75.Text = date.ToLongTimeString();
        textBox23.Text = culture.DateTimeFormat.FullDateTimePattern;
        label76.Text = date.ToString(culture.DateTimeFormat.FullDateTimePattern);
        textBox24.Text = culture.DateTimeFormat.SortableDateTimePattern;
        label77.Text = date.ToString(culture.DateTimeFormat.SortableDateTimePattern);
        textBox25.Text = culture.DateTimeFormat.UniversalSortableDateTimePattern;
        label78.Text = date.ToString(culture.DateTimeFormat.UniversalSortableDateTimePattern);
        textBox6.Text = string.Join(", ", culture.DateTimeFormat.MonthNames);
        textBox7.Text = string.Join(", ", culture.DateTimeFormat.MonthGenitiveNames);
        textBox8.Text = string.Join(", ", culture.DateTimeFormat.AbbreviatedMonthNames);
        textBox9.Text = 
            string.Join(", ", culture.DateTimeFormat.AbbreviatedMonthGenitiveNames);
        textBox10.Text = string.Join(", ", culture.DateTimeFormat.DayNames);
        textBox11.Text = string.Join(", ", culture.DateTimeFormat.ShortestDayNames);
        textBox12.Text = string.Join(", ", culture.DateTimeFormat.AbbreviatedDayNames);
 
        //Currency
        textBox33.Text = culture.NumberFormat.CurrencySymbol.ToString();
        label81.Text = currency.ToString("C");
        textBox32.Text = culture.NumberFormat.CurrencyDecimalDigits.ToString();
        label82.Text = currency.ToString("C");
        textBox31.Text = culture.NumberFormat.CurrencyDecimalSeparator.ToString();
        label83.Text = currency.ToString("C");
        textBox30.Text = culture.NumberFormat.CurrencyGroupSeparator.ToString();
        label84.Text = currency.ToString("C");
        textBox29.Text = string.Join(", ", culture.NumberFormat.CurrencyGroupSizes);
        label85.Text = currency.ToString("C");
        textBox28.Text = culture.NumberFormat.CurrencyNegativePattern.ToString();
        label86.Text = (-1234).ToString("C");
        textBox27.Text = culture.NumberFormat.CurrencyPositivePattern.ToString();
        label87.Text = (+1234).ToString("C");
 
        //Number
        textBox39.Text = culture.NumberFormat.NumberDecimalDigits.ToString();
        label90.Text = number.ToString("N");
        textBox38.Text = culture.NumberFormat.NumberDecimalSeparator.ToString();
        label91.Text = number.ToString("N");
        textBox37.Text = culture.NumberFormat.NumberGroupSeparator.ToString();
        label92.Text = number.ToString("N");
        textBox36.Text = string.Join(", ", culture.NumberFormat.NumberGroupSizes);
        label93.Text = number.ToString("N");
        textBox35.Text = culture.NumberFormat.NumberNegativePattern.ToString();
        label94.Text = number.ToString("N");
        textBox34.Text = culture.NumberFormat.PositiveSign.ToString();
        label95.Text = number.ToString("N");
 
        //Percent

        textBox46.Text = culture.NumberFormat.PercentSymbol.ToString();
        label98.Text = percent.ToString("P");
        textBox45.Text = culture.NumberFormat.PerMilleSymbol.ToString();
        label99.Text = percent.ToString("P");
        textBox44.Text = culture.NumberFormat.PercentDecimalDigits.ToString();
        label100.Text = percent.ToString("P");
        textBox43.Text = culture.NumberFormat.PercentDecimalSeparator.ToString();
        label101.Text = percent.ToString("P");
        textBox42.Text = culture.NumberFormat.PercentGroupSeparator.ToString();
        label102.Text = percent.ToString("P");
        textBox41.Text = string.Join(", ", culture.NumberFormat.PercentGroupSizes);
        label103.Text = percent.ToString("P");
        textBox40.Text = culture.NumberFormat.PercentNegativePattern.ToString();
        label104.Text = (-1234).ToString("P");
        textBox26.Text = culture.NumberFormat.PercentPositivePattern.ToString();
        label105.Text = (+1234).ToString("P");
 
        //Infinity 
        textBox48.Text = culture.NumberFormat.NegativeInfinitySymbol.ToString();
        textBox47.Text = culture.NumberFormat.PositiveInfinitySymbol.ToString();
 
        //Culture mapping with SQL Server language
        sqlculturemapping obj = new sqlculturemapping().getSqlMappings().Where
                                (c => c.LCID == culture.LCID.ToString()).FirstOrDefault();
        if (obj == null)
        {
            obj = new sqlculturemapping();
        }
        textBox52.Text =Convert.ToString( obj.FullName);
        textBox51.Text = Convert.ToString(obj.Alias);
        textBox50.Text = culture.LCID.ToString();
        textBox49.Text = Convert.ToString(obj.specificulture);
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    } 
}  

让我们逐步了解上述方法。以下代码块用于将所有默认值加载到相应的局部变量中。

DateTime date = DateTime.Now;    //Convert.ToDateTime(textBox57.Text);
Int64 currency = Convert.ToInt64(textBox56.Text);
Int64 number = Convert.ToInt64(textBox55.Text);
Int64 percent = Convert.ToInt64(textBox54.Text);
string cultureCode = "en-US"; 

之后,我将当前culture更改为选定的culture。文化可以在textbox中输入或在combobox中选择。

CultureInfo culture = new CultureInfo(cultureCode);
 
System.Threading.Thread.CurrentThread.CurrentCulture = culture; 

更改当前culture后,所有格式和示例都将根据更改的culture显示。

textBox21.Text = culture.DateTimeFormat.ShortTimePattern;
label74.Text = date.ToShortTimeString();   

为了获得 SQL Server 映射,我使用了以下代码。我已经为SQLCultureMapping创建了一个类

sqlculturemapping obj = new sqlculturemapping().getSqlMappings().Where
                        (c => c.LCID == culture.LCID.ToString()).FirstOrDefault();  

点击此处阅读有关如何在该实用工具中使用sqlculturemapping的更多信息。

摘要

在这篇文章中,我创建了一个实用工具来显示“.NET Framework 文化及其特定格式与 SQL Server 语言的映射”。如果我遗漏了什么或需要任何更正,请告诉我。我希望您喜欢这篇文章,并从中获得一些额外的知识。

您可能对以下文章感兴趣

我已投入时间和精力在我的所有文章中。请不要忘记为我的投票建议和反馈,以提高本文和即将发表文章的质量。感谢您的阅读。

历史

  • 2013年5月19日:初始版本
© . All rights reserved.