处理日期仅限于.Net中的时区

时间:2008-09-17 03:49:16

标签: .net date

好的 - 有点满口。所以我遇到的问题是 - 我需要存储一个到期日期,其中需要日期部分,我不希望任何时区转换。因此,例如,如果我将期限设置为“2008年3月8日”,我希望将该值返回给任何客户 - 无论他们的时区是什么。 将其作为DateTime进行远程处理的问题是它被存储/发送为“2008年3月8日00:00”,这意味着对于从我西部的任何时区连接的客户,它将被转换为因此转为“2008年3月7日” 有关干净地处理这种情况的任何建议吗?显然将其作为字符串发送将起作用。还要别的吗 ? 谢谢, 伊恩

7 个答案:

答案 0 :(得分:1)

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

.NET 3.5引入了新的DateTimeOffset类型,它适用于在时区之间传输DateTime,但对仅限日期的方案没有帮助。

理想情况下,WCF需要选择性地支持xs:日期,以按照此处的要求序列化日期:

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

答案 1 :(得分:1)

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

这样我就不必在逻辑中处理时区,只能在演示文稿中处理。

答案 2 :(得分:0)

您可以将其作为UTC时间发送

dateTime1.ToUniversalTime()

答案 3 :(得分:0)

我认为发送时间戳字符串将是最快/最简单的方法,尽管您可以查看强制语言环境来停止发生时间转换。

答案 4 :(得分:0)

您可以创建一个结构日期,用于访问您想要/需要的详细信息,例如:

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

轻巧,灵活,让您完全掌控。

答案 5 :(得分:0)

为什么不将它作为字符串发送然后根据需要将其转换回日期类型?这样它就不会在不同的时区转换。保持简单。

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

答案 6 :(得分:0)

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

是的,这很痛苦......