Fan*_*o68 3 c# datetime sql-server-2005 date-format
我有一个datetime字段,其格式如下......
dd/mm/yyyy - 这是英国/ GB/AU格式
有时会以美国格式发现日期......
毫米/日/年
如果DAY超过12且MONTH在12以内,则此方法正常.
如果不是,则自动假定日期采用美国格式.
即:2014年1月1日可以在两个方面进行互操作 - 英国和美国(3月1日或1月3日)
我如何在C#中解析它以了解它是哪种文化?显然没有直接的单行方式这样做,因为在美国或英国文化中解析这些日期将再次返回相同的日期.
问题是,无论我们在DD和MM中有什么价值,我如何强制美国日期为英国格式,并留下英国格式的日期?
我试图使用以下代码执行此操作...
//get the date from a control
TextBox tbDate = (TextBox)e.Row.FindControl("tbInvoiceDate");
if (tbDate != null && tbDate.Text != "")
{
//define the two cultures I want to test
IFormatProvider cultureAU = new CultureInfo("en-AU", true);
IFormatProvider cultureUS = new CultureInfo("en-US", true);
//try and parse the date into US culture
DateTime dtINV;
DateTime.TryParse(tbDate.Text, cultureUS, DateTimeStyles.None, out dtINV);
//"force" the date to be in UK format
String strDate = (dtINV != null && tbDate.Text != "") ? dtINV.ToString("dd-MM-yyyy") : "";
//return the new format back to the textbox
tbDate.Text = dtINV.ToShortDateString();
}
Run Code Online (Sandbox Code Playgroud)
上述代码不起作用,因为美国日期保留为美国日期,因为日期和月份,正如我上面所解释的那样,也是正确的"格式",因为它是英国日期.
我想我在这里错过了一些额外的代码来分别测试日期和月份,然后格式化日期.
提前致谢.
[UPDATE]
我已经解决了一些问题(参见下文),使用以下代码,并假设文本框中的日期始终采用mm-dd-yyyy格式.
TextBox tbDate = (TextBox)e.Row.FindControl("tbInvoiceDate");
if (tbDate != null && tbDate.Text != "")
{
IFormatProvider cultureAU = new CultureInfo("en-AU", true);
DateTime dtIn;
DateTime.TryParse(tbDate.Text, cultureAU, DateTimeStyles.AssumeLocal, out dtIn);
DateTime dtInv = new DateTime(dtIn.Year, dtIn.Day, dtIn.Month);
tbDate.Text = dtInv.ToShortDateString();
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当我在AU格式中键入新日期时,系统会在上面的代码之前启动,出现以下错误...
将char数据类型转换为smalldatetime数据类型导致语句已终止的超出范围的smalldatetime值
所以现在似乎有些东西现在期望该领域采用美国格式.但我尝试用美国格式输入31-01-2014,但它仍然会出现上述错误,因此不确定现在要去哪里.
谢谢大家到目前为止.
我怎样才能强制美国日期为英国格式并单独留下英国格式的日期?
没有自动的方式来了解这一点.如果您收到"04/03/2014"的日期,则无法在没有额外信息的情况下知道这是代表3月4日还是4月3日.
为了正确处理日期,您需要提供文化以及日期,始终使用特定的文化,或者将日期表示为DateTime
而不是string
.
归档时间: |
|
查看次数: |
629 次 |
最近记录: |