C#将字符串转换为没有时间的日期时间

Posted

技术标签:

【中文标题】C#将字符串转换为没有时间的日期时间【英文标题】:C# convert string to datetime without time 【发布时间】:2014-11-30 05:19:09 【问题描述】:

我想要的似乎不可能(至少根据我读过的一些文章)。但只是为了仔细检查它。我正在从我的数据库中读取DateTime。在数据库中,它的写法类似于“01.01.2011”,但是当我使用 SQL 读取它并将其存储在 string 中时,它会显示“01.01.2011 00:00:00”。 然后我想好吧,我会从string 中缩短时间。但是有诀窍,这似乎是不可能的。即使我从string(它只是说“01.01.2011”)中剪切“00:00:00”部分,并将其转换为DateTime,“00:00:00”仍然存在显示。 我是 C# 的新手,但似乎这部分在 Java 中得到了更好的解决,您可以在其中定义您想要的日期以及它的显示方式(当您不想要它时不连接时间)。 因此,为了清楚起见,真的不可能实现我想要的(并且我必须在我的表示层中处理正确的格式)还是我只是没有找到正确的信息?

谢谢

【问题讨论】:

我不清楚你想要达到什么目的。你能告诉我们你真正想要做什么吗?在你的问题中用简短的描述交换最后一个“我想要什么”。 【参考方案1】:

DateTime 在 .Net 中始终是日期和时间。如果你愿意,你可以忽略时间部分,但它仍然存在。在内部,DateTime 跟踪自 0001 年 1 月 1 日以来的完整滴答数。 (一毫秒内有 10,000 个滴答声)。所以DateTime 不可能没有 有时间组件。

对于仅日期数据,通常的约定是使用时间设置为午夜 (00:00:00) 的日期。您可以使用 .Date 属性从任何 DateTime 获取其中之一。

你要小心,一旦你忽略了时间,你总是忽略了时间。否则,在巴西等地处理夏令时问题时,您可能会遇到问题 - 时间从晚上 11:59:59 转换为凌晨 1:00:00。如果您不小心处理数据的方式,那么在午夜填充在 DateTime 中的仅日期数据可能会被误解为实际不存在的本地时间。

.NET Framework 中没有没有时间的真实日期的内置类型。但是,您可以在 Noda Time 库的 LocalDate 结构中找到它。如果您有很多基于日期的业务逻辑,您可能会考虑使用它。

【讨论】:

谢谢,这也是我发现的,但想在这里检查一下(因为我不敢相信)。我也读过关于 Noda Time 的文章,但在我尝试之前我想我会检查它是否真的不可能使用原生 C#。再次感谢 NP。此外,您正在与 Java 进行比较,但那里也有类似的问题。 java.util.Date 是日期+时间类型,Calendar 也是如此。 Joda-Time 和 Java8 都有 LocalDate 类型,类似于 Noda Time。【参考方案2】:

myDatTime.ToString("MMM dd, yyyy"); 可以解决问题

【讨论】:

所以我必须将其从字符串转换为日期时间(因为我从 sql 将其作为字符串),然后从日期时间转换为字符串(应用您的函数时),然后再转换为日期时间(因为我需要它作为日期时间)? @user3466562 c# 支持直接使用数据库日期时间类型进行日期时间类型转换。因此,当您读/写数据库时,您只需将 datatime 对象作为参数传递,它就会很乐意接受它。如果您只想显示日期而不显示时间,请执行 to string 方法 我也看到了,但问题是日期时间为空时。所以我想我会把它读成字符串然后处理它。但这似乎是一件让人头疼的事情。据此:social.msdn.microsoft.com/Forums/vstudio/en-US/… 不可能从 c# 中的日期时间截断时间。所以我想我将不得不检查字符串日期是否为空,如果没有将其检索为日期时间 @user3466562 你应该在你的数据库中使用 DateTime 类型而不是字符串......这就是它存在的原因。您可以通过'dataRow [Column] is DbNull'检查该字段是否为空,如果不是,则进行转换 在数据库中它当然是一个日期时间类型但没有时间(所以它实际上只是一个日期)。但是当我从我的数据库中用 c# 读取它时,它会自动将“00:00:00”连接到我的日期(没有其他语言正在这样做 - java、delphi - 我只是得到我的日期,因为它在我的数据库中) 【参考方案3】:

如果我理解你的话.. 这可能会有所帮助。 在 c# 中:if(!string.IsNullOrEmpty(yourDateTime)) yourDateTime.ToString("dd/MM/yyyy"); 在 sql-server 中:

select convert(varchar, yourDateTime ,102) as [yourDateTime]

【讨论】:

以上是关于C#将字符串转换为没有时间的日期时间的主要内容,如果未能解决你的问题,请参考以下文章

如何在c#中将字符串转换为日期[重复]

将 C# 日期时间发送到 SQL Server - 错误“从字符串转换日期和/或时间时转换失败”

如何在 .Net / C# 中将日期转换为 HTTP 格式的日期

通过 Ajax 将 Javascript 日期转换为 C#

将字符串转换为日期时间的问题

如何在 C# 中将字符串转换为日期时间 [重复]