DateTime a1 = new DateTime(Convert.ToDateTime(txtStartDate.Text).Year, Convert.ToDateTime(txtStartDate.Text).Month, Convert.ToDateTime(txtStartDate.Text).Day, 0, 0, 0);
我试图将系统时间从12小时hh更改为24小时HH并重新启动 网站插入仍然是12:00:00
我想要00:00:00
答案 0 :(得分:7)
您所看到的是格式问题,而不是数据问题。它确实是00:00:00,但是你将它转换为字符串显示为12:00:00,可能是隐含的“am”。不要忘记DateTime
实际上中没有格式 - 它只是日期/时间。您可以自己适当地格式化,例如
Console.WriteLine(a1.ToString("yyyy-MM-dd HH:mm:ss"));
除此之外,我强烈建议您不要以这种方式创建DateTime
。我个人更喜欢使用DateTime.TryParseExact
或DateTime.ParseExact
,而不是使用“当前文化喜欢的任何模式”,但即使你做想用{{{ 1}},做一次会更清楚,然后使用Convert.ToDateTime
属性获取时间设置为0的Date
:
DateTime
答案 1 :(得分:1)
嗯,技术上没有时间00:00:00。 11:59:59之后变成12:00:00。也许我只是不明白你想要做什么:)
您可以在代码中使用特殊逻辑来修改它,如果它是12:00:00,则将其显示为00:00:00或其他内容。但开箱即用,没有魔法或格式字符串可以做到这一点。
答案 2 :(得分:1)
您可以通过指定格式来简化:
DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", "01/27/2011"),
CultureInfo.GetCultureInfo("en-US"));
我不知道您的文本框是什么格式,但假设它是01/27/2011(美国格式),您可以更改上述代码段以便轻松工作:
DateTime a1 = DateTime.Parse(string.Format("{0} 00:00:00", txtStartDate.Text),
CultureInfo.GetCultureInfo("en-US"));
将您的CultureInfo.GetCultureInfo
(它实施IFormatProvider
)更改为您正在使用的那个。理想情况下,您应该将日期解析为UTC日期,但这是一个不同的讨论。
答案 3 :(得分:0)
如果要将DateTime对象添加到字符串或想要以某种形式的文本显示它,则会自动使用ToString() - Method。 ToString()使用" en-US"作为默认文化。当然,您可以手动调用ToString()并使用您希望的任何CultureInfo进行参数化,但有时这是不可能的。
例如,当您通过数据绑定访问DateTime对象时,您无法传递任何CultureInfo,最终会在" en-US"中找到日期字符串。在这种情况下,您需要为当前线程设置CultureInfo,如:
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("de-DE");
在调用此行之后,所有日期都将定位在" de-DE"只要您不使用不同的CultureInfo手动调用ToString()。
请阅读此链接:https://msdn.microsoft.com/en-us/library/k494fzbf(v=vs.110).aspx
答案 4 :(得分:0)
你可以简化那个
if (!string.IsNullOrEmpty(txtStartDate.Text))
{
string startDate = Convert.ToDateTime(txtStartDate.Text).ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
}