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# 日期时间发送到 SQL Server - 错误“从字符串转换日期和/或时间时转换失败”