0

我们正在使用以下详细信息进行申请。

1) C#.Net 上的 Web/桌面应用程序

2) 将用户活动时间戳存储为日期时间字段。

我们需要以 UTC 格式存储这个时间戳。

现在,在显示时它将被转换为用户的时区。

问题

用户可以从一个办公室飘到另一个办公室。(多个办事处都在不同的时区)。

现在,假设我们要显示用户一个月的活动。(它可能包括不同的时区)。

我们如何存储/跟踪用户时区信息?

以便它在运行时转换时间并显示正确的时间。

例如

世界标准时间

第 1 天:时间 1

第2天:时间2

世界标准时间 +1:30

第 3 天:时间 3

ETC..

你能建议如何处理这个问题。

提前致谢。

4

5 回答 5

4

如果您DateTime.UtcNow在记录活动时间戳时使用,您将始终获得正确的时间。通常是服务器存储时间戳,所以无论如何它都是相对于服务器的。

如果用户输入它,那么您必须在保存之前将输入时间转换为 UTC。这可以从用户文化/时区设置中获取。

当向用户显示它时,您根据用户在世界的​​哪个位置设置线程上的文化和时区信息。

如果您没有将日期的“UTC”部分存储在数据库中(即使它是 UTC 格式),您可以将其转换为 UTC,如下所示:

DateTime date = ..from db..;
date = DateTime.SpecifyKind(date, DateTimeKind.Utc);

要在时区之间进行转换,请查看MSDN

于 2010-07-05T13:27:53.053 回答
1
  1. 使用myDate.ToUniversalTime()将所有记录保存到数据库
  2. 使用myDate.ToLocalTime()从数据库加载时

然后,您的用户可以随心所欲地移动。

于 2010-07-06T08:35:55.313 回答
0

您可以将当前时区(TimeZoneInfo.Local 或 TimeZone.CurrentTimeZone,它们相同,但首选第一个)与您的时间戳一起保存。

我认为用户应该从 Windows 时钟属性面板更改当前时区。

于 2010-07-05T13:27:10.873 回答
0
System.Threading.Thread.CurrentThread.CurrentCulture

返回您当前的文化信息

于 2010-07-05T13:24:19.080 回答
0

在我看来,应用程序本身应该强制用户输入他们当前工作的时区,以便通过任何方法获得可靠的时间戳。我的猜测是在登录时询问此信息。虽然这可能会让用户感到烦恼,但期望用户通过某种可选设置对话框更新他们的时区是一种幻想。

如果您有资源并且非常大胆,您总是可以根据他们访问 VPN 隧道的计算机的 IP 地址来获取时区,尽管我什至无法开始帮助您做到这一点。

于 2010-07-06T08:16:57.510 回答