在eCommerce应用程序中,
场景1
假设服务器在美国纽约,客户端在日本东京。客户发出订单,需要在10天内交付。在这种情况下,有两个地区纽约,美国和东京,日本,并有10天的承诺。
发布于 2015-07-02 08:02:45
要获得任何合理合理的实现,您应该将日期存储为UTC。这是一个独立于时区和夏时制的线性时间。
当您从数据库读取时间并将其显示给用户时,应将其转换为他们的本地时区。在.NET中,可以使用TimeZoneInfo对象将日期转换为特定的时区。
当客户端下订单时,数据库中输入了多少时区详细信息?
您只需要将UTC时间存储在数据库中。这是一个精确的时间点,以后可以转换为任何本地时间。
当我计算10天时,根据哪一个时区来计算10天?
这取决于如何定义这10天。你只需把10天的时间加到世界协调时,你就能得到一个时间点,正好在240小时后。这意味着你在实践中可能只有9天的交货时间,这取决于下订单的时间和一天中的什么时间。
这十天也可定义为日历日,然后将整个第十天包括在内,例如,如果用户在2015-07-02 03:26下订单,则应在2015-07-12 23:59之前到达他的时区。
发布于 2015-07-02 06:22:03
您需要始终将约会时间存储在UTC中。您可以通过调用UTC函数获得当前的GETUTCDATE()时间。
因此,如果您有像OrderDate这样的字段来存储订单的日期和时间,则可以使用DATEDADD函数计算交付日期。如果设计中需要,可以将结果存储到另一列中。
示例:
DECLARE @OrderDate DATETIME
SET @OrderDate = '20150702 15:35:21'
SELECT @OrderDate AS OrderDate
,DATEADD(DAY, 10, @OrderDate) AS DeliveryDate输出
OrderDate DeliveryDate
2015-07-02 15:35:21.000 2015-07-12 15:35:21.000当您要显示日期和时间时,应按用户的本地时间显示。您需要在演示文稿层中格式化日期。尽管您在Server中有一些函数来处理这个问题,但是不要在数据库层中设置它的格式。
发布于 2015-07-02 08:06:33
您可以以UTC或通用格式(服务器时区)存储时间。当你显示时间,它将被转换到日本(视你的情况而定)。后端在服务器时区有时间,因此可以使用它来计算时间。
再加10天。将时间转换为服务器,并添加10天。
用这种方法做所有的计算,它都会工作的。
我以前在一些代码库中使用过同样的方法,而且这个工作很好。
https://stackoverflow.com/questions/31174709
复制相似问题