在电子商务应用中,
情景1
假设服务器位于美国纽约,客户端位于日本东京。客户下订单,需要在10天内交付。在该场景中,纽约,美国和东京,日本有两个区域,并且有10天的承诺。
答案 0 :(得分:2)
要获得任何合理的理解,您应该将日期存储为UTC。这是一个与时区和夏令时无关的线性时间。
当您从数据库中读取时间并将其显示给用户时,您应该将其转换为本地时区。在.NET中,您可以使用TimeZoneInfo
对象将日期转换为特定时区。
当客户端下订单时输入了多少时区详细信息 数据库?
您只需将UTC时间存储在数据库中。这是一个确切的时间点,您可以稍后转换为任何当地时间。
当我计算10天时,根据10天所需的时区 要计算?
这取决于如何定义这10天。您只需将10天添加到UTC时间,就可以获得恰好240小时后的时间点。这意味着您实际上只需要九天的时间来完成交货,具体取决于订单的下达时间以及您可以交货的时间。
这十天也可以定义为日历日,然后包括整个第十天,例如如果用户在2015-07-02 03:26下订单,则应在2015-07-12 23:59之前到达他的时区。
答案 1 :(得分:1)
您需要始终将日期时间存储在UTC
。您可以通过调用GETUTCDATE()
函数获取当前UTC
时间。
因此,如果您有一个类似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
如果要显示日期和时间,则应按用户的当地时间显示。您需要在表示层中格式化日期。虽然SQL Server中有函数可以处理,但不要在数据库层中对其进行格式化。
答案 2 :(得分:1)
您可以以UTC或通用格式存储时间(您的服务器时区)。当您显示它将转换为日本的时间时(根据您的情况)。您的后端在服务器时区中有时间,因此您可以使用它来计算时间。
添加10天。 将时间转换为服务器并添加10天。
以这种方式进行所有计算,它都可以。
我以前在某些代码库中使用过相同的方法,这很好。