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






3.55/5 (5投票s)
用于 .NET Framework 文化及其特定格式与 SQL Server 语言映射的实用工具。CultureInfo、日期格式、数字格式、货币格式、百分比格式、无穷大格式等。
- 下载 CultureHelperUtility EXE(工具) - 16.3 KB
- 下载 CultureHelperUtility 源代码(无 EXE) - 28.9 KB
- 下载 CultureHelperUtility 源代码 - 104.2 KB
引言
本文面向在 Web 应用程序或数据库级别使用不同语言的人员。在这里,您可以找到不同语言的DateTime
、Number
、Currency
、Percent
等的特定文化格式。本文基于 .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 语言的映射”。如果我遗漏了什么或需要任何更正,请告诉我。我希望您喜欢这篇文章,并从中获得一些额外的知识。
您可能对以下文章感兴趣
- 有助于将日期和时间值在字符串文字和其他日期和时间格式之间转换的函数
- 一些有趣的日期和时间问题
- 日期和时间数据类型和函数 - SQL Server
- 字符串数据类型和函数 - SQL Server
- .NET Framework 文化及其特定格式与 SQL Server 语言的映射
我已投入时间和精力在我的所有文章中。请不要忘记为我的投票、建议和反馈,以提高本文和即将发表文章的质量。感谢您的阅读。
历史
- 2013年5月19日:初始版本