为什么我的日期在c#中只设为2位数字?

为什么我的日期在c#中只设为2位数字?,c#,C#,在下面的代码片段中,我设置了TDate=new DateTime(2013,12,31),但是当我查看对象数据时,TDate被设置为12/31/13(我没有显示时间),而不是12/31/2013。当我将其发送给SqlServer时,SqlServer自然会抱怨datetime2的限制。为什么今年不定在2013年?请帮助-我能做些什么才能拥有2013年12月31日 trxs.Add(new Transaction { AccountPK = string.Format("{0}{1}", t

在下面的代码片段中,我设置了TDate=new DateTime(2013,12,31),但是当我查看对象数据时,TDate被设置为12/31/13(我没有显示时间),而不是12/31/2013。当我将其发送给SqlServer时,SqlServer自然会抱怨datetime2的限制。为什么今年不定在2013年?请帮助-我能做些什么才能拥有2013年12月31日

trxs.Add(new Transaction 
{
  AccountPK = string.Format("{0}{1}", t.acctno, Prefs.BCode),
  Balance = 0.0m,
  BCode = Prefs.BCode,
  ChqNo = t.chq_no.ToString(),
  Details = t.details,
  RowID = (int)t.roid,
  TDate = new DateTime(2013, 12, 31),
  TrxAmount = t.fx_amt,
  TrxDate = string.Format("{0:dd/MM/yyyy}", t.tdate),
  TrxRef = (int)t.tref,
  TrxType = t.trx_type
 });
引用的类是:

    public class Transaction
{
    public string AccountPK { get; set; }
    public int RowID { get; set; }
    public DateTime TDate { get; set; }
    public int TrxRef { get; set; }
    public string Details { get; set; }
    public decimal TrxAmount { get; set; }
    public decimal Balance { get; set; }
    public string ChqNo { get; set; }
    public string TrxDate { get; set; }
    public string BCode { get; set; }
    public string TrxType { get; set; }
}

在web.config中指定区域性。例如

<system.web>
<globalization uiCulture="en" culture="en-GB"/>
</system.web>
小心

SQL Server必须与.NET代码具有相同的区域性。您可以通过此MSDN链接在SQL Server中设置区域性:


如果这两种文化相匹配,您将不再有此问题。

您如何看待
TDate
?您确定显示的
TDate
不是简单地以短格式显示吗?显示的代码无法生成您在文本中声明的日期(出于某种原因,您可能在调试器中将其视为“短日期”格式,但它不会更改
.Year
的值)。您需要说明这个问题-在当前状态下,post听起来只是一些调试误解。TDate是一个日期时间。TrxDate此时存储为字符串是有原因的。我对TDate有问题,而不是TrxDate。一旦我能解决TDate,我就不需要TrxDate了。非常感谢。如果我没有TDate的解决方案,那么我将保留TrxDateYou可能是对的,但在调试中,所有其他DateTime变量-正确显示-SqlServer会在我尝试插入时抱怨。使用visual studio-调试查看数据。使用HttpClient将数据发布到Web服务器。当它到达那里时,它将被插入SqlServer。它失败了——抱怨datetime2限制。一年前,当我第一次创建它的时候,这是可行的——那时我从未注意到任何关于日期的事情
 Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-GB");