【问题标题】:Client datetime vs Server datetime客户端日期时间与服务器日期时间
【发布时间】:2013-04-19 02:22:32
【问题描述】:

我有一个 C# Web 应用程序,它已安装在美国服务器上,而数据库在另一台服务器上。我正在从印度访问我的申请。现在,当用户注册时,他从默认选择当前系统日期时间的日历控件中选择报告日期,并从后台 C# 代码插入用户创建日期。由于我在本地国家浏览器中使用该应用程序,这就是两个日期不同的原因。有没有办法解决这个冲突。

obUser.CreationDate = Datetime.Now

【问题讨论】:

  • 你能用例子解释一下你的问题是什么吗?
  • 确保您数据库中的所有 DateTimes 始终存储在 UTC 时区(UtcNow 而不仅仅是 Now)以及应用程序和数据库也使用 UTC 时区,无论您向用户显示DateTime,请使用utcDateTime.ToLocalTime()

标签: c# asp.net-mvc


【解决方案1】:

还有:

obUser.CreationDate = DateTime.UtcNow;

看: Converting DateTime.Now To A Different Time Zone

TimeZoneInfo maltaTimeZone = TimeZoneInfo.FindSystemTimeZoneById("...");
DateTime utc = DateTime.UtcNow;
DateTime malta = TimeZoneInfo.ConvertTimeFromUtc(utc, maltaTimeZone )

时区列表 List of Timezone ID's for use with FindTimeZoneById() in C#?

static void Main(string[] args)
{
    foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
        Console.WriteLine(z.Id);
}

【讨论】:

  • UtcNow 不返回准确时间,如果您的服务器不在美国
  • UTC 返回 UTC 时间,您必须将其转换为您的时区。
【解决方案2】:

而不是DateTime.Now 使用:DateTime.UtcNow。 UtcNow 根据MSDN:

获取设置为当前日期和时间的 DateTime 对象 这台计算机,以协调世界时 (UTC) 表示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2015-07-20
    • 2019-07-05
    相关资源
    最近更新 更多