我在SQL中的日期存储为DateTime, 当在文本框中显示它们时,我这样做:
txtDateLogged.Text = v.DateLogged.ToString("dd-MM-yyyy");
但是当我更新那个文本框写回SQL时获取并且使用此时无效的DateTime错误:
if (DateLogged!= "")
{
uInput.DateLogged = Convert.ToDateTime(DateLogged);
}
我假设我在格式化中遗漏了一些东西 - 日期值被传递到公共void,以字符串形式进行更新,然后在上面的行中进行转换。 有什么建议吗?
感谢
Ť
答案 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 )