SQL Server的C#日期格式

时间:2012-06-27 11:01:17

标签: c# sql-server

我在SQL中的日期存储为DateTime, 当在文本框中显示它们时,我这样做:

txtDateLogged.Text = v.DateLogged.ToString("dd-MM-yyyy");

但是当我更新那个文本框写回SQL时获取并且使用此时无效的DateTime错误:

if (DateLogged!= "")
{ 
     uInput.DateLogged = Convert.ToDateTime(DateLogged);
}

我假设我在格式化中遗漏了一些东西 - 日期值被传递到公共void,以字符串形式进行更新,然后在上面的行中进行转换。 有什么建议吗?

感谢

Ť

4 个答案:

答案 0 :(得分:8)

您需要使用与转换为文本相同的格式转换 back ,例如

uInput = DateTime.ParseExact(text, "dd-MM-yyyy", CultureInfo.InvariantCulture);

有关详细信息,请参阅DateTime.ParseExact的文档。

当然,如果您可以避免转换为字符串表示形式 - 或保留DateTime - 那会更好。

如果您正在解析用户输入,则应使用DateTime.TryParseExact代替,以便在不使用流量控制异常的情况下考虑无效数据的可能性。

答案 1 :(得分:0)

也许使用:

 uInput.DateLogged = (new DateTime(year, month, day))

从DateLogged中提取年/月/日部分。

修改

既然您知道字符串中的日期是“dd-MM-yyyy”,那么这就是您提取部分的方式:

int year = Convert.ToInt16(DateLogged.Substring(6, 4));
int month = Convert.ToInt16(DateLogged.Substring(3, 2));
int day = Convert.ToInt16(DateLogged.Substring(0, 2));

如果由MM表示“JA” - 则需要将“JA”转换为“01”或1。

答案 2 :(得分:0)

您还可以使用DateTime.TryParse并使用CultureInfo解析字符串值。
用户将能够使用特定于文化的格式输入数据,您只需将其转换为InvariantCulture

 DateTime b;
 bool isCorrectValue = false;
 CultureInfo uiCulture = Thread.CurrentThread.CurrentUICulture;
 if (DateTime.TryParse(DateLogged, uiCulture, DateTimeStyles.None, out b))
     isCorrectValue = true;

答案 3 :(得分:0)

105 格式

中的SQL转换日期中

e.g。

  

选择转换(varchar(20),getdate(), 105