我正在开发一个项目,该项目具有ASP.NET Web API服务,使用AngularStrap日期选择器接受来自Angular客户端的DateTime值。我们有一个字段代表发生事件的日期,对于这个字段,时间组件并不重要。客户端发送日期选择器值为UTC,其时间分量相对于用户的时区,但是当存储日期时,我们将其存储为UTC,没有时间,因为时间不相关,如2014-05-08 00:00: 00.000Z。
当客户端检索日期时,服务器再次将其作为UTC发回,其时间值为全零。但是,客户端正在将其从UTC转换回本地时区,导致显示给用户的日期在未来一天内转移。
当我真的不关心时间时,如何绕过UTC转换?我应该从服务器返回相对于用户时区的预转换日期值吗?有什么方法可以忽略时间组件吗?
答案 0 :(得分:1)
一般情况下回答,因为到目前为止你很难说出你所描述的内容。
没有时间的日期不是JavaScript Date
对象或.Net DateTime
对象的合适人选。
由于这两种语言本身都不提供真正的仅限日期的数据类型,因此您可以考虑将其保留为ISO-8601格式的字符串("YYYY-MM-DD"
)
如果您需要在.Net中使用仅限日期的值,请考虑使用Noda Time中的LocalDate
类型。
每当您使用日期+时间组件通过将时间设置为全零来表示仅限日期的值时,您将该时间固定为午夜。
对于本地时区,这是有问题的,因为在世界某些地方,在春季前进夏令时转换当天,午夜不存在。 (例如:Brazil)
UTC也不是一个很好的选择,因为午夜UTC在美洲大部分时区的前一天都有。
通常情况下,没有时间的日期指的是整个日或当天的结尾。使用零将它放在当天的 start 。考虑到2014-01-01到2014-01-02是两天,或48小时。但2014-01-01T00:00:00至2014-01-02T00:00:00仅跨越24小时。这是许多错误的原因。
如果您想编辑问题以提供证明问题的特定代码,我可能会提供更具体的建议。