.Net中仅处理跨时区的日期

时间:2020-03-05 18:57:51  来源:igfitidea点击:

好吧,一口气。因此,我的问题是,我需要存储一个到期日期,其中仅需要日期部分,并且我不希望进行任何时区转换。因此,例如,如果我将到期时间设置为" 2008年3月8日",那么我希望将该值返回给任何客户端,无论其时区如何。
将其作为DateTime进行远程处理的问题在于,它以" 08 March 2008 00:00"存储/发送,这意味着对于从我以西的任何时区进行连接的客户端,它将转换并因此转换为" 2008年3月7日"
有什么建议可以干净地处理这种情况吗?显然,将其作为字符串发送即可。还要别的吗 ?
谢谢,
伊恩

解决方案

回答

我们可以将其发送为UTC时间

dateTime1.ToUniversalTime()

回答

我认为以时间戳记字符串形式发送将是最快/最简单的方法,尽管我们可以考虑强制使用语言环境来停止时间转换。

回答

我们可以创建一个结构日期,以提供对所需/所需详细信息的访问,例如:

public struct Date
{
    public int Month; //or string instead of int
    public int Day;
    public int Year;
}

它轻巧,灵活,可为我们提供完全控制。

回答

为什么不将其作为字符串发送,然后根据需要将其转换回日期类型?这样,它将不会在不同时区进行转换。把事情简单化。

编辑:我喜欢Struct的想法,允许良好的功能。

回答

我过去在应用程序上处理此问题的最简单方法是将日期以yyyy-mm-dd格式存储为字符串。它是明确的,不会被任何东西自动翻译。

是的,这很痛苦...

回答

我不确定我们指的是什么远程处理技术,但这是WCF的真正问题,它目前仅支持将DateTime序列化为xs:DateTime,不适用于我们对时区不感兴趣的仅日期值。

.NET 3.5引入了新的DateTimeOffset类型,该类型对于在时区之间传输DateTime很有用,但对于仅日期的情况没有帮助。

理想情况下,WCF需要根据以下要求可选地支持xs:Date来序列化日期:

http://connect.microsoft.com/wcf/feedback/ViewFeedback.aspx?FeedbackID=349215

回答

我这样做是这样的:每当我在内存中存储日期或者将日期存储在文件中时,它总是位于UTC的DateTime中。当我向用户显示日期时,它始终是一个字符串。当我在字符串和DateTime之间进行转换时,我也会进行时区转换。

这样,我就不必在逻辑中处理时区,仅在演示中就可以。