如何用HH:mm:ss = 00:00:00而不是12:00:00设置日期时间?

时间:2011-01-27 09:13:47

标签: c# asp.net sql-server

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

5 个答案:

答案 0 :(得分:7)

您所看到的是格式问题,而不是数据问题。它确实是00:00:00,但是你将它转换为字符串显示为12:00:00,可能是隐含的“am”。不要忘记DateTime实际上中没有格式 - 它只是日期/时间。您可以自己适当地格式化,例如

Console.WriteLine(a1.ToString("yyyy-MM-dd HH:mm:ss"));

除此之外,我强烈建议您不要以这种方式创建DateTime。我个人更喜欢使用DateTime.TryParseExactDateTime.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日期,但这是一个不同的讨论。

datetime

答案 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);
            }