【问题标题】:UTC Time related issue in Application, (C#,ASP.NET & SQL)应用程序中的 UTC 时间相关问题,(C#、ASP.NET 和 SQL)
【发布时间】:2014-11-17 06:45:01
【问题描述】:

我正在开发一个与销售和采购报告相关的应用程序。 我正在使用该购买和销售报告的数据生成图表。

采购订单和销售订单的创建日期是相对于 (UTC + 5.30) 时间的,即这个时间是针对印度孟买的。

场景-1

假设这是场景(目前这个应用程序在印度用于这个场景)

Lets Say, 
**Purchase Order & sales Order Generation is as follows**
                      Purchase Order(Rs)       Sales Order(Rs)
    31-Jan-2014 11.00PM      1000                   2000  
    31-Jan-2014 10.00PM      2000                   4000

如果我创建图表,那么图表的数据将如下所示。

              Purchase   Sales
 Jan-2014       3000     6000

我对这种情况没有任何问题,

但是假设我在美国有一个分支机构,而我的一位美国同事创建了相同的采购订单和销售订单,那么我的问题如下开始

场景-2

假设是这个场景(目前这个应用在美国用于这个场景)

Lets Say, 
    **Purchase Order & sales Order Generation is as follows**
                     Purchase Order(Rs)  Sales Order(Rs)
31-Jan-2014 11.30PM      1000                   2000  
31-Jan-2014 11.00PM      2000                   4000

据此,如果我创建一个图表,那么图表的数据将如下所示。

              Purchase   Sales
 Feb-2014       3000     6000

原因:因为我使用 (UTC+5.30) 时间来创建采购和销售报告。 对于坐在美国并在 2014 年 1 月 31 日下午 12 点
(美国时间为 UTC)

So According to US, Sales & purchase Order Date is 31-Jan
So According to India, Sales & purchase Order Date is 1-Feb

问题: 那么解决这个问题的标准方法是什么,我应该在图表或整个应用程序中显示什么,使用美国时间、印度时间或某个公共时间 因为使用此应用程序的最终用户不知道什么是 UTC,所以他只会对正确的值感兴趣。

谢谢。 任何帮助将不胜感激。

【问题讨论】:

  • 可能有两个选项。您可以将所有日期存储在单个时区(我会更喜欢)中,或者将时区与日期一起保存,以便您可以相应地转换它以编写查询..
  • 处理这种情况的标准方法是什么。
  • 您说的是印度时间或美国时间。两个客户端都只能看到该时区​​
  • 标准方式是将整个应用程序中的数据存储在单个时区 (UTC) 中。您始终可以将此时区转换为本地时区,以根据用户的位置向用户显示相应的时间。
  • 但是日期还有一个更严重的问题是,如果我手动进入我的计算机设置并将日期更改为一年,那么假设我已经创建了采购订单,那么插入日期也必须是今天的日期怎么可能?

标签: c# sql asp.net sql-server utc


【解决方案1】:

为了处理这些情况,我们应该始终在代码DateTime.UtcNow 和数据库GETUTCDATE() 中使用UTC 格式的日期时间。

请参考以下链接:

how to handle time zones and dates in multi country/lingual application

http://msdn.microsoft.com/en-us/library/bb397769.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-3

【讨论】:

  • 但是日期还有一个更严重的问题是,如果我手动进入我的计算机设置并将我的日期更改为一年,那么假设我已经创建了采购订单,那么插入日期也必须是今天的日期怎么可能?
  • 执行代码将在服务器上运行。因此,即使用户更改了日期时间,“DateTime.Now”或“DateTime.UtcNow”也会提供当前服务器的日期时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-16
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多