如何在 C# 应用程序范围内更改仅日期部分将用于日期时间比较

Posted

技术标签:

【中文标题】如何在 C# 应用程序范围内更改仅日期部分将用于日期时间比较【英文标题】:How to make C# application wide change that Only Date part will be used on DateTime comparison 【发布时间】:2014-11-21 22:25:45 【问题描述】:

我正在使用 .Net 4.0。我正在开发一个最初只适用于美国的应用程序,但现在它正在走向全球。问题是: 在美国或其他国家/地区进行的所有计算都恰好在其各自的时区中。现在,当我们想根据特定日期比较或过滤某些数据时,它们不匹配,因为整个日期的时间部分不同。我知道我们不能像文化一样实现应用程序范围的时区。但是有没有办法在整个应用程序中进行最少的代码更改并仅比较 DateTime 属性的 Date 部分。

印度用户查看时保存在美国时区的日期如下:

2014 年 10 月 23 日上午 9:30:00

现在,当印度用户想要过滤 2014 年 10 月 23 日的数据时,没有返回任何内容,因为:

23-Oct-2014 09:30:00 AM 不等于 23-Oct-2014 12:00:00 AM

我不想对整个应用程序中的 DateTime 属性进行数千次更改,有没有办法以最小的代码更改来纠正整个应用程序的问题。非常感谢任何帮助。

【问题讨论】:

How to compare only Date without Time in DateTime types in C#? 的可能重复项 我希望能以最少的代码更改获得解决方案。此链接中提供的解决方案需要在整个应用程序中的每个 DateTime 比较中更改代码。 Ctrl+F?我不确定如果您不更改代码,您会如何期望代码突然开始表现不同... @NavneetDuggal 您的问题不取决于应用程序用户处于不同的时区。如果您在印度,在当地时间 2014 年 10 月 23 日上午 9:30:00 保存文件,然后您在印度,通过查找值 23-Oct- 来搜索 2014 年 10 月 23 日保存的文件2014 12:00:00 AM,你还是找不到文件。 除非您实际上将日期时间保存为(转换/格式化)字符串 - 在线程上设置正确的文化听起来像是显示日期时间的一种方式。 【参考方案1】:

这听起来可能很疯狂,我不知道这是否适用于您的所有代码。特别是如果您有 3rd 方库

但是如果你在System命名空间下的项目中添加一个结构 并将其命名为DateTime,然后它将覆盖真正的System.DateTime,并且它的使用将带有一条带有一条消息的摇摆不定的下划线,说明它与原来的冲突并且正在使用你的。

我认为这不是一个好主意,但如果您复制日期时间代码并更改您需要的内容 它可能会起作用。

DateTime.cs

【讨论】:

以上是关于如何在 C# 应用程序范围内更改仅日期部分将用于日期时间比较的主要内容,如果未能解决你的问题,请参考以下文章

C# 后台如何向SQL数据库中插入一定时间范围内的随机日期值,到日就可以!!

C# 获取一个指定范围内的随机日期函数代码

如何使用 snowsql 在给定日期范围内构造日期数组?

如何使用 bigquery 从日期列中仅查找星期日

如何在某个日期范围内从表存储中删除记录?

选择日期范围内的特定日期