我有一个由许多子应用程序编写的全局应用程序:
我想在许多服务器中发送这些“应用程序部分”。 我的问题是:我希望日期仍然准确。 如果一个活动在太平洋时间下午6点存储,我不希望我的欧洲用户在他们的主板上看到“6:00 PM”。
我读了很多文章说“你只需要保存日期” =>但是我不能改变保存每个日期的方式,这代表了太多的工作(是的,它是保存的日期时间而不是日期偏移)。
我已阅读其他建议更改服务器上时区的文章=>但是我不能想要这样做,因为这些服务器可以用于其他目的。
好消息是日期始终在应用程序中定义,数据库未生成。
因此,我唯一要做的就是在应用程序级别定义TimeZone 。因此,无论它们在哪里,我的应用程序将始终使用相同的时区。剩下的唯一步骤是在当前用户的时区中转换UI级别的日期(非常简单,因为所有日期都通过相同的本地化日期时间转换方法)。
我真的无法改变应用程序开发人员的工作方式,因为它很容易出错。他们需要继续使用DateTime.Now,而不考虑转换。
我使用的确切技术与此无关,问题是全球.Net。
感谢您的帮助
编辑:假设我的问题只是让 DateTime.Now 返回 UTC日期。 有没有办法做到这一点?
答案 0 :(得分:1)
以UTC格式存储所有时间。
DateTime.UtcNow
然后在客户端处理TZ校正。
编辑:我错过了关于不更改DateTime.Now的关键部分。让程序员做得对;它不容易出错。
您需要让所有客户端代码都使用DateTime.UtcNow或让所有客户端代码使用数据库来获取时间戳。无论哪种方式 - 你都有工作要做。
祝你好运!答案 1 :(得分:0)
我将给你一个简单的答案,理解如果答案很简单,我可能会误解这个问题:
将本地应用程序的时区保存在服务器上。然后你可以根据需要改变当地时间。如果您的本地开发人员正在使用DateTime.Now,那很好,只要在数据库中的某个位置,您就可以说DateTime.Now的值已针对此时区进行了调整。
是这样,还是我忽略了什么?
答案 2 :(得分:0)
选项:以GMT / UTC保存所有日期时间,然后通过用户(他们的浏览器)的javascript获取时区,并显示考虑该时区的日期。
// Gets the Browsers timezone offset in minutes
function getClientTimezoneOffsetInMinutes()
{
var rightNow = new Date();
var date1 = new Date(rightNow.getFullYear(), 0, 1, 0, 0, 0, 0);
var date2 = new Date(rightNow.getFullYear(), 6, 1, 0, 0, 0, 0);
var temp = date1.toGMTString();
var date3 = new Date(temp.substring(0, temp.lastIndexOf(" ") - 1));
var temp = date2.toGMTString();
var date4 = new Date(temp.substring(0, temp.lastIndexOf(" ") - 1));
var hoursDiffStdTime = (date1 - date3) / (1000 * 60 * 60);
var hoursDiffDaylightTime = (date2 - date4) / (1000 * 60 * 60);
return hoursDiffStdTime;
}