C# 想要在C中使用DateTime的24小时格式时间吗#

C# 想要在C中使用DateTime的24小时格式时间吗#,c#,datetime,C#,Datetime,我的日期和时间以24小时格式存储在数据库中。我所做的是使用存储过程获取所需的日期和时间并插入到数据表中。但在datatable中,它会自动转换为12小时格式。从datatable中获取数据后,可以将其转换为24小时模式,但必须将其转换为字符串。但问题是,我需要使用数据创建一个仅接受DateTime格式的图表。 所以我想要的是某种方法,将12小时时间转换为24小时时间格式,而不将其更改为字符串。请帮助 我的日期和时间以24小时格式存储在数据库中 我希望它们不是以任何文本格式存储,而是存储在Date

我的日期和时间以24小时格式存储在数据库中。我所做的是使用存储过程获取所需的日期和时间并插入到数据表中。但在datatable中,它会自动转换为12小时格式。从datatable中获取数据后,可以将其转换为24小时模式,但必须将其转换为字符串。但问题是,我需要使用数据创建一个仅接受DateTime格式的图表。 所以我想要的是某种方法,将12小时时间转换为24小时时间格式,而不将其更改为字符串。请帮助

我的日期和时间以24小时格式存储在数据库中

我希望它们不是以任何文本格式存储,而是存储在
DateTime
字段或类似的内容中。不要将“运行SQL查询时看到的内容”与“存储在数据库中的内容”混为一谈。正如数字不存储为十进制数字序列一样,日期和时间也不应存储为文本

但在datatable中,它会自动转换为12小时格式

不,如果您已经正确地完成了所有操作,那么它应该将所有操作都存储在
数据表
中,作为
日期时间
。在调试器中,您可能会看到12小时的字符串表示形式,但对象本身应该是
DateTime

基本上,12/24小时问题只是真正问题的一个症状:不必要的字符串转换。找到(并移除)它们,其余的应该自行处理。因此,如果您当前正在调用
ToString()
DataTable
提取值,请停止这样做。相反,只需投下:

DateTime dateTime = (DateTime) row["foo"];
我的日期和时间以24小时格式存储在数据库中

我希望它们不是以任何文本格式存储,而是存储在
DateTime
字段或类似的内容中。不要将“运行SQL查询时看到的内容”与“存储在数据库中的内容”混为一谈。正如数字不存储为十进制数字序列一样,日期和时间也不应存储为文本

但在datatable中,它会自动转换为12小时格式

不,如果您已经正确地完成了所有操作,那么它应该将所有操作都存储在
数据表
中,作为
日期时间
。在调试器中,您可能会看到12小时的字符串表示形式,但对象本身应该是
DateTime

基本上,12/24小时问题只是真正问题的一个症状:不必要的字符串转换。找到(并移除)它们,其余的应该自行处理。因此,如果您当前正在调用
ToString()
DataTable
提取值,请停止这样做。相反,只需投下:

DateTime dateTime = (DateTime) row["foo"];

乔恩说的都是对的

但是,如果您只是解释错了,并且您的数据库中确实有
DateTime
对象,并且您希望仅在显示时将其格式化为24小时,那么您可以在24小时格式中使用字符串格式的“HH”

例如,对于表示16:00的
myDateTime

var hourPart = String.Format("{0:HH}", myDateTime) 
Console.WriteLine(hourPart); // prints 16, and not 4PM.

乔恩说的都是对的

但是,如果您只是解释错了,并且您的数据库中确实有
DateTime
对象,并且您希望仅在显示时将其格式化为24小时,那么您可以在24小时格式中使用字符串格式的“HH”

例如,对于表示16:00的
myDateTime

var hourPart = String.Format("{0:HH}", myDateTime) 
Console.WriteLine(hourPart); // prints 16, and not 4PM.

从您的故事中,我了解到,
DataTable
实际上包含一个
DateTime
值,该值本身没有任何格式,它基本上只是存储了自任意日期和时间以来的一些刻度。您在表可视化中看到的是基于应用程序区域性设置的默认
ToString()
转换

最可能的情况是,如果在运行现有代码之前执行类似操作,则格式会发生更改:

var cultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);
cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss";
Thread.CurrentThread.CurrentCulture = cultureInfo;

不过,我建议您通过打电话明确地转换为您喜欢的格式。如何才能最好地实现这一点取决于如何可视化
数据表中的数据。根据您的故事,我了解
数据表实际上包含一个
日期时间
值,本身没有任何格式,它基本上只存储任意日期和时间后的若干个刻度。您在表可视化中看到的是基于应用程序区域性设置的默认
ToString()
转换

最可能的情况是,如果在运行现有代码之前执行类似操作,则格式会发生更改:

var cultureInfo = new CultureInfo(CultureInfo.CurrentCulture.Name);
cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss";
Thread.CurrentThread.CurrentCulture = cultureInfo;

不过,我建议您通过打电话明确地转换为您喜欢的格式。如何最好地实现这一点取决于如何可视化
数据表中的数据

日期时间
结构完全没有格式。它只是关于日期和时间的信息。
DateTime
struct根本没有格式。这只是关于日期和时间的信息。感谢您的回复…bt有没有一种方法可以将12小时格式的datetime转换为24小时格式,而无需将其转换为字符串(无需更改其类型)。@user1919448 datetime对象存储时不会考虑任何特定格式。您可以从任何DateTime对象获取24小时格式,如:
string formatted24HourTime=myDateTime.ToString(“HH:mm”)
我不敢相信我否决了Jon Skeet的答案,但如果你仔细阅读,DataTable中的数据类型已经是
日期时间
,因此这种修辞是不必要的。@Tharrin:如果你仔细阅读,你会发现我说过:“不,如果您已经正确地完成了所有工作,那么它应该将数据表中的所有内容存储为日期时间。在调试器中,您可能会看到一个12小时的字符串表示形式,但对象本身应该是DateTime。”不过,我要补充一点说明。重点是OP不应该将值视为“12小时格式”的值