这个问题与 tzinfo 又名 Olson 时区数据库中的标准时区列表有关。
示例 1:我注意到使用 America/New_York 或 America/Detroit(称为“范例城市”,请参阅http://www.w3.org/International/docs/timezones/#tzids)而不是 US/Eastern。
示例 2:在加拿大,山区时区通常被描述为 America/Edmonton,而不是 Canada/Mountain。不列颠哥伦比亚省的部分地区采用山地时间,但其时区指定为美洲/埃德蒙顿(位于艾伯塔省)。
在这些情况下,为什么要使用地区/示范城市选项而不是国家/地区版本?首先创建国家/地区版本肯定是有原因的,但如果它不是首选方式,为什么还要创建它呢?
当一个国家拥有多个时区时,这主要是一个问题。
是否有最佳实践说明为什么其中一种优于另一种?
(PS,这对谷歌来说是一个困难的问题,因为你得到的都是不相关或无帮助的结果。我能找到的最接近的是夏令时和时区最佳实践,但它没有解决这个问题。)
编辑:2 个时区可以代表 1 个城市吗?“因为并不是每个人都使用规范的大陆/城市表示法来表示他们的时区(例如,我倾向于使用旧的美国/太平洋表示法 - 它仍然受支持,但相当于 America/Los_Angeles)。” 他关于“美国/太平洋”较旧的说法与我认为它较新的间接假设相矛盾,但仍然不是答案。
我意识到这有点主观,但是我希望在这里选择大家如何处理多个时区?这里有各种类似的问题和各种各样的接受答案.
怎么会有你这种衣食住行中的应用程序,你已经建立,并且你必须克服哪些问题?
也许答案是如此明显,我没有看到它,但我有一个问题,无论如何我都会冒险.
我希望允许.NET Web应用程序的用户输入日期/时间,将其存储在Oracle数据库中,无论他们在哪个时区,它始终显示为用户输入的原始原始版本.因此,如果加利福尼亚州的一个用户进入下午2点,而马里兰州的另一个用户进入下午2点,则他们都会向日本的用户显示为2PM.有两种类型的客户端,一个是Web用户,一个是Windows客户端用户(通过Web服务连接).
想想它就像我想彻底打破大多数应用程序所担心的所有时区智能.
我不想保存为字符串.我想要一个可以添加/删除小时和分钟的日期时间.
编辑:
这基本上是我遇到的确切问题.
我试图知道是否有办法让DateTime对象在设置为GMT时间的操作系统上获得所有正确的属性.不只是改变时间.
现在我正在做的是:
DateTime f = new DateTime(2012, 8, 1); //A date on summer
DateTime f2 = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(f, TimeZoneInfo.Local.Id, "Central Europe Standard Time");
var isSummer = f2.IsDaylightSavingTime(); //It always returns false if the OS is on GMT
Run Code Online (Sandbox Code Playgroud)
它改变了时间和日期,使GMT成为中欧标准时间就好了,但IsDaylightSavingTime功能不会起作用.它总是返回false,因为我在系统上使用GMT,但我认为不应该因为我DateTime为中欧创建了一个.
有没有办法让DateTime对象f2真正本地化并让它理解如果它的八月并且是欧洲中心它应该返回true而不是false?
我知道如果我在机器上使用本地时间它可以正常工作,但我无法改变服务器上的GMT时间.我很乐意,但我不能.:-)
我发现我正在处理的应用程序有一个错误,日期时间错误地存储在我们的数据库中.我将其跟踪到DateTime.FromBinary如何操作之间的一些不一致.
我使用此代码作为测试用例:
var dateTime = DateTime.FromBinary(-8587689004854775808);
string toString = dateTime.ToString();
Run Code Online (Sandbox Code Playgroud)
在我的Windows PC(.NET 4.5,控制台应用程序)以及我的iOS应用程序(Xamarin.iOS 8.10.0.267)上,我得到以下结果:
5/27/2015 12:00:00 AM
Run Code Online (Sandbox Code Playgroud)
但是,在我们的天蓝色服务器上,它将在同一天发布,但是早上6点.
作为一个快速测试,我解雇了DotNetFiddle:
https://dotnetfiddle.net/ziBwfA
果然输出是:
5/27/2015 6:00:00 AM
Run Code Online (Sandbox Code Playgroud)
请注意,我还输出了"Kind"属性,它又以'Local'的形式返回,因此我认为这不是本地与utc的问题.
有关为什么会出现这种情况的任何想法?
我们将日期存储在sqlserver db表中,作为varchar。当在Java代码中将其作为字符串读取然后解析为Date时,它将被读取为UTC(Java代码位于UT中的服务器中)。将日期重新转换为ET时要晚4小时。如何处理将日期存储在此db列中的ET中,以便在Java代码中将其读取为ET。
我们正在研究偏移量,但并未确切了解该怎么做。
表03/29/2019 23:23:03中的Varchar日期//我们希望此日期位于ET中
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date beginDate = sdf.parse("03/29/2019 23:23:03");
Run Code Online (Sandbox Code Playgroud)
//问题是执行此代码时,服务器处于UTC状态。因此beginDate //被解读为UTC时间03/29/2019 23:23:03而不是美国东部时间03/29/2019 23:23:03
预计于03/29/2019 23:23:03 ET实际03/29/2019 23:23:03 UTC
我对时区有一些疑问.我们以UTC时间存储所有日期,但我们需要在本地(美国东部)时间和UTC同时显示其中一些日期.
这是我的测试,我有UTC的日期,并希望以UTC和当地时间显示它:
<html>
<!-- let's assume this date is in UTC, I get it from Database in my code -->
<jsp:useBean id="dateValue" class="java.util.Date" />
GMT
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="GMT"/>
</html>
<!-- Displays the original time +4 - not what I need-->
No time zone
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z"/>
<!-- Displays the original time, but timezone is EDT -->
US/Eastern
<fmt:formatDate value="${dateValue}" pattern="yyyy-MM-dd HH:mm:ss z" timeZone="US/Eastern"/>
<!-- Displays the original time, timezone is EDT, I need original + …Run Code Online (Sandbox Code Playgroud) 在MySQL中尝试处理unix时间戳时,我发现了一些奇怪的东西.我注意到在转换为任意日期的unix时间戳时,介于'00:59:59'和'01:00:00'之间的时间超过1秒.深入挖掘我有以下示例查询,结果我不明白:
SELECT FROM_UNIXTIME(1382835600) AS a, FROM_UNIXTIME(1382832000) AS b;
+---------------------+---------------------+
| a | b |
+---------------------+---------------------+
| 2013-10-27 01:00:00 | 2013-10-27 01:00:00 |
+---------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
两个unix时间戳相距1小时(3600秒),但生成的时间戳相同.也许这是一个时区问题,但它毕竟是在同一台服务器上.
我希望能够在我的程序中实现一个条件,它只能运行N个小时,也许用户可以指定N,但是我们不能超前.
我想我可以使用datetime.now() 并将下面的值存储在变量中,time
>>> time
>>> time = datetime.datetime(2013, 12, 9, 21, 50, 32, 405329)
Run Code Online (Sandbox Code Playgroud)
关于如何访问( - )之间的第四个字段,看到它是一个字符串的任何想法?
我的条件就像while time != timeEndtimeEnd将是下面的值:
>>> timeEnd = datetime.datetime(2013, 12, 9, 21+N, 50, 32, 405329)
谢谢
我正在使用时刻时区进行时区计算。我有一些来自数据库的偏移GMT数据,如、GMT+1、GMT+2、GMT+3等GMT+4。
无论如何,我可以从这些数据中获取时区或时区名称,例如“America/Los_Angeles”吗?