好的 - 有点满口。所以我遇到的问题是 - 我需要存储一个到期日期,其中仅需要日期部分,我不希望任何时区转换。因此,例如,如果我将期限设置为“2008年3月8日”,我希望将该值返回给任何客户 - 无论他们的时区是什么。 将其作为DateTime进行远程处理的问题是它被存储/发送为“2008年3月8日00:00”,这意味着对于从我西部的任何时区连接的客户,它将被转换为因此转为“2008年3月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格式的字符串。它是不明显的,不会被任何东西自动翻译。
是的,这很痛苦......