首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理订单和时区相关问题?

如何管理订单和时区相关问题?
EN

Stack Overflow用户
提问于 2015-07-02 02:30:12
回答 3查看 209关注 0票数 2

在eCommerce应用程序中,

场景1

假设服务器在美国纽约,客户端在日本东京。客户发出订单,需要在10天内交付。在这种情况下,有两个地区纽约,美国和东京,日本,并有10天的承诺。

  1. 当客户端下订单时,数据库中输入了多少时区详细信息?
  2. 我的一位同事告诉我,我必须考虑UTC的问题,但这如何符合这一点呢?
  3. 当我计算10天时,根据哪一个时区来计算10天?
  4. 有人能给我一个很好的链接来显示这是如何处理的吗?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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之前到达他的时区。

票数 2
EN

Stack Overflow用户

发布于 2015-07-02 06:22:03

您需要始终将约会时间存储在UTC中。您可以通过调用UTC函数获得当前的GETUTCDATE()时间。

因此,如果您有像OrderDate这样的字段来存储订单的日期和时间,则可以使用DATEDADD函数计算交付日期。如果设计中需要,可以将结果存储到另一列中。

示例:

代码语言:javascript
复制
DECLARE @OrderDate DATETIME
SET @OrderDate = '20150702 15:35:21'

SELECT  @OrderDate AS OrderDate
        ,DATEADD(DAY, 10, @OrderDate) AS DeliveryDate

输出

代码语言:javascript
复制
OrderDate                  DeliveryDate
2015-07-02 15:35:21.000    2015-07-12 15:35:21.000

当您要显示日期和时间时,应按用户的本地时间显示。您需要在演示文稿层中格式化日期。尽管您在Server中有一些函数来处理这个问题,但是不要在数据库层中设置它的格式。

票数 1
EN

Stack Overflow用户

发布于 2015-07-02 08:06:33

您可以以UTC或通用格式(服务器时区)存储时间。当你显示时间,它将被转换到日本(视你的情况而定)。后端在服务器时区有时间,因此可以使用它来计算时间。

再加10天。将时间转换为服务器,并添加10天。

用这种方法做所有的计算,它都会工作的。

我以前在一些代码库中使用过同样的方法,而且这个工作很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31174709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档