How to show a UTC time as local time in a webpage?
我有一个数据库,其时间为UTC。 这个时间可以在网页上显示,因此我被要求在页面中显示为本地时间,因为它可以从任何国家/地区查看。 一位同事提到了从当前线程(在服务器上)获取国家/地区设置的一些内容,但我找不到任何有关此问题的详细信息。 我想做什么?
如果您(和您的网站)对javascript感到满意,那么有一种非常简单的方法可以实现此目的。
首先,在服务器端,您将使用RFC 3339格式(其他协议中使用的互联网时间标准,icalendar)格式化UTC日期/时间。 RFC 3339的基本语法是:
1 | YYYY-MM-DDTHH:MM:SS |
这样,我在哪里,时间将是:
1 | 2010-05-04T05:52:33 |
但是当时间不是本地时,而是UTC时,你会在末尾添加一个
1 | 2010-05-04T10:52:33Z |
所以,首先让服务器将上述内容输出到您的网页的javascript。然后,javascript可以解析该时间戳,并将输出调整到浏览器时区的日期和时间(由托管浏览器的计算机确定)。您应该记住,如果用户来自东京并且正在西班牙查看您的网站,他们将在东京时间看到时间戳,除非他们调整了计算机的时钟。
所以javascript将是:
1 2 3 4 | var time_string_utc = some_server_variable; // timestamp from server var time_string_utc_epoch = Date.parse(time_string_utc); var time_utc = new Date(); time_utc.setTime(time_string_utc_epoch); |
此时,您将javascript日期对象设置为UTC时间戳。快速解释上面发生的事情:
第一个变量假定您已将时间戳字符串从服务器传递给该变量。
第二个变量使用
第三个变量创建未设置的Date对象。
最后一行使用
现在您拥有了该对象,您可以根据需要将其输出给用户。作为一个简单的实验,您可以使用:
1 | document.write(time_utc); |
如果你在我的时区使用UTC时间戳我开始时:
1 | 2010-05-04T10:52:33Z |
会给:
1 | Tue May 04 2010 05:52:33 GMT-0500 (CST) |
但是你可以使用各种javascript方法将时间格式化为更令人愉悦的东西。
只要您信任用户的本地浏览器/计算机时区,就无需猜测用户的国家/地区甚至调整时间戳。
再次,简短版本:
1 2 3 4 5 | var time_string_utc = some_server_variable; // UTC time from server var time_string_utc_epoch = Date.parse(some_server_variable); var time_utc = new Date(); time_utc.setTime(time_string_utc_epoch); document.write(time_utc); |
还要考虑阅读这个线程,该线程深入研究了跨越时区处理夏令时问题的dos和donts
编辑:
考虑一下,一旦拥有客户的文化,我认为不可能显示当地时间。我当然有兴趣看到你同事的建议。
例如,获得美国文化无济于事,因为美国有许多时区。
我认为使用像安东尼这样的Javascript建议会是要走的路......
旧:
您可以使用设置当前(选定或浏览器报告)文化的代码覆盖InitializeCulture()方法:
1 2 3 4 | Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage); Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedLanguage); |
当然是可能的。您只需要找到
我确信管理此问题的最佳方法是让您的同事知道您需要有关项目中国家/地区设置实施的更多详细信息以及如何使用它。
这就是我在连接到MySQL数据库的登录文件中用PHP完成的:
1 2 | //set local timezone date_default_timezone_set('America/Denver'); //use local TZ |
然后,每次访问数据库时,您都要设置该会话的时区以及与之关联的任何输入/输出。