我正在尝试更新大型代码库以在格式化/解析值时正确指定CultureInfo和/或。IFormatProvider例如,当解析从用户那里获得的值时,我CultureInfo.CurrentCulture在调用 时传递TryParse,而当将浮点数转换为字符串以进行持久化时,我CultureInfo.InvariantCulture在调用 时传递ToString。
我的问题是:生成 SQL 查询时,我应该使用不变区域性、SQL 服务器区域性还是什么来格式化数字等?也就是说,如果我的计算机设置为德语(德国),那么以下哪个查询是正确的?
select foo from bar where baz = 123.45
Run Code Online (Sandbox Code Playgroud)
或者
select foo from bar where baz = 123,45
Run Code Online (Sandbox Code Playgroud)
同样,如果我使用 SQLCAST将浮点值转换为字符串,SQL 将使用什么区域设置进行转换?
我确实搜索了 SQL 文档,但到目前为止我找不到任何好的答案。我确实找到了一些有关日期格式的信息(SET DATEFORMAT 等),但仅此而已。
注意:我意识到将输入传递给 SQL 查询的首选方法是通过参数,因此为了论证,我们假设我有充分的理由将它们格式化为查询字符串。此外,处理查询输入只是更广泛问题的一部分。
我希望我的DateTime具有特定的格式,具体取决于当前的文化.
所以我试试这个:
dateTime.ToString("dd/MM/yyyy hh:mm");
Run Code Online (Sandbox Code Playgroud)
这部分正常,/被文化特定的分隔符取代.但是根据文化的不同,日期和月份顺序不会切换(如MM/dd).
使用.ToString("g")作品,但不包括前导零.
我该如何做到这一点?
我正在向paypal发送参数作为隐藏形式的变量.
但我的网站文化是丹麦语.所以"50,00"是"amount_1"的值
<input type="hidden" name="amount_1" value="50,00" />
Run Code Online (Sandbox Code Playgroud)
我正在使用此代码将50转换为"50,00"
item.PricePaid.ToString("#.00")
Run Code Online (Sandbox Code Playgroud)
我相信这个数字应该是这样的:"1234.56"有没有办法在这个过程中将文化设置为en-US?(不是宽边)还是更好的方法呢?
谢谢!
可能重复:
如何识别拼写不同的相似单词
在比较这三个字符串:“ voest”,“ vost”和“vöst”(德国文化)时,我试图使它返回true,因为它是同一个词。(实际上,只有oe和ö相同,但是例如对于DB归类CI来说是相同的,这是正确的,因为'vost'是错误键入的'voest')
无论我提供给该方法什么参数,string.Compare(..)/ string.Equals(..)始终返回false。
如何使string.Compare()/ Equals(..)返回true?
我收到了一个应用程序的崩溃报告,该应用程序尝试从之前编写的文件中读取XML.在请求用户将文件发送给我之后,我将其与应该写的文件进行了比较,发现了一个我之前没有遇到过的奇怪问题.
一些(但不是全部)i角色已被替换为?- 无点的我.例如,一个名为"title"的节点很好,但名为"initialdirectory"的节点有第一个被替换,第二个被单独留下,即?nitialdirectory.
直到今天,我甚至都不知道有这样一个角色,但现在我做了,我只是不知道它是如何编写的那样 - XML是XmlWriter用UTF8编码编写的.只是一般的日常写作,没有什么复杂的.
我通常(好吧,因为得到Resharper并且它在跳过参数StringComparison.OrdinalIgnoreCase时对我大吼大叫)在做IndexOf等时使用,但我在编写数据时应该如何做到这一点我不知所措,除非我应该开始改变线程文化.
以前有没有人遇到类似的问题,如果有的话,最好的方法是什么?
我知道日期/数字的文化规则对于整本书来说已经足够了,我想我有一个简单的问题.
使用InvariantCulture是否基本上意味着您明确定义将输入/显示的值(日期/数字/等)的文化?它会覆盖任何其他文化设置(例如用户代理的设置)?
如果应用程序是为一个且只有一种文化的受众构建的,那么使用InvariantCulture并定义每次输入/显示值的方式是否合理?
我想将 Kendo Datepicker 本地化为我的文化“is-IS”,但由于某种原因它不能\xc2\xb4t 正常工作。这是代码示例:
\n\n$("#RegisterDatePicker").kendoDatePicker({\n start: "month",\n culture: "is-IS",\n value: new Date(),\n format: "dd.MMMM yyyy",\n events: {\n change: "registerDatePicker_OnChange"\n }\n});\nRun Code Online (Sandbox Code Playgroud)\n\n该文化似乎恢复到其默认本地化“en-US”。我知道这种文化应该与 Datepicker 一起使用,因为每当我在 Razor 引擎中声明 Datepicker 时,它都会正确呈现。Here\xc2\xb4s 来自 Razor 的代码示例:
\n\n@(Html.Kendo().DatePicker()\n .Name("RegisterDatePicker")\n .Start(CalendarView.Month)\n .Value(DateTime.Now)\n .Format("dd.MMMM yyyy")\n .Events(e => e.Change("registerDatePicker_OnChange"))\n .Culture("is-IS")\n)\nRun Code Online (Sandbox Code Playgroud)\n\n谁能指出我的日期选择器的脚本声明有什么问题吗?
\n我可以为特定文化更改DateTime的标准输出格式.例:
class Program
{
static void Main(string[] args)
{
PrintCultureDateTime("ca-ES");
PrintCultureDateTime("es-ES");
PrintCultureDateTime("en-US");
PrintCultureDateTime("en-GB");
PrintCultureDateTime("pt-PT");
}
public static void PrintCultureDateTime(string culture)
{
string result = new DateTime(2017, 10, 1).ToString("d",
CultureInfo.GetCultureInfo(culture));
Console.WriteLine(string.Format("{0}: {1}", culture, result));
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
ca-ES: 1/10/2017
es-ES: 01/10/2017
en-US: 10/1/2017
en-GB: 01/10/2017
pt-PT: 01/10/2017
Run Code Online (Sandbox Code Playgroud)
我想要的是使用标准"d"格式或其他标准格式的日期和月份两位数字,以便修复DateTime字符串的大小.像那样的输出:
ca-ES: 01/10/2017
es-ES: 01/10/2017
en-US: 10/01/2017
en-GB: 01/10/2017
pt-PT: 01/10/2017
Run Code Online (Sandbox Code Playgroud) 用C#在什么情况下,我需要提供一个CultureInfo IFormatProvider使用时ToString()上String还是Char?
我通过数字或日期转换得到它,例如
(-10000.4).ToString(provider: new System.Globalization.CultureInfo("es-ES"));
(-10000.4).ToString(provider: new System.Globalization.CultureInfo("en-US"));
DateTime.Now.ToString(provider: new System.Globalization.CultureInfo("es-ES"));
DateTime.Now.ToString(provider: new System.Globalization.CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)
赠送:
-10000,4
-10000.4
01/05/2018 22:49:09
5/1/2018 10:49:09 PM
Run Code Online (Sandbox Code Playgroud)
但是以下内容如何:
"Some string".ToString(provider: new System.Globalization.CultureInfo("es-ES"));
"Some string".ToString(provider: new System.Globalization.CultureInfo("en-US"));
Run Code Online (Sandbox Code Playgroud)
我可能会使用哪些字符串受文化影响?
同样的char.
我想为整个 winform 应用程序设置文化。
我怎样才能做到这一点?
我Program.cs像这样改变了我的文件:
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Divar
{
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
var culture = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = culture;
CultureInfo.DefaultThreadCurrentUICulture = culture;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new RadForm1());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做对了吗?
这取得了有限的成功,因此在 InitializeComponent() 之前的“Form1”顶部,我放置了:
System.Globalization.CultureInfo cultureInfo = new System.Globalization.CultureInfo("en-GB");
Application.CurrentCulture = cultureInfo;
System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-GB");
Run Code Online (Sandbox Code Playgroud)
是否有必要在每种形式的 InitializeComponent() …
culture ×10
c# ×8
datetime ×3
.net ×1
.net-4.6.2 ×1
asp.net ×1
asp.net-mvc ×1
cultureinfo ×1
format ×1
kendo-ui ×1
localization ×1
razor ×1
sql ×1
sql-server ×1
string ×1
tostring ×1
winforms ×1
xml ×1