2

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

4

7 回答 7

1

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

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

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

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

于 2008-09-17T07:21:13.260 回答
1

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

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

于 2008-09-17T10:50:06.907 回答
0

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

dateTime1.ToUniversalTime()

于 2008-09-17T03:52:03.997 回答
0

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

于 2008-09-17T03:55:02.163 回答
0

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

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

这是轻量级、灵活的,可让您完全控制。

于 2008-09-17T04:00:48.373 回答
0

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

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

于 2008-09-17T04:01:02.837 回答
0

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

是的,这很痛苦……

于 2008-09-17T04:39:52.210 回答