我正在开发一个网络工具,目前遇到一个问题,在某些选项卡上,我得到的是 UTC 而不是正确的时区偏移量。
即如果我放入控制台:
(new Date()).getTimezoneOffset()
我在某些选项卡中得到 0,在其他选项卡中得到 420 的值。甚至加载了完全相同网站的选项卡。
当我使用 getMonth、getDate、getHours 等时......时间也都是 UTC 格式。
我刚开始使用 getTimezoneOffset,那么这种行为是我应该期待的吗?根据我正在阅读的内容,我认为这应该是我电脑上的当地时间,在此过程中根本没有改变。
Chrome 版本 71.0.3578.80(官方版本)(64 位)
是我做错了什么还是这确实是我在 Chrome 中发现的错误?我似乎找不到任何此类错误的记录。最接近的是 Android 专用的。https://bugs.chromium.org/p/chromium/issues/detail?id=520783
然而,在 Chrome 用户众多的情况下,我似乎不太可能是第一个发现此类错误的人。我想确定这绝对是一个错误。
以下是一些附加信息:
navigator.userAgent = Mozilla/5.0(Windows NT 6.1;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/71.0.3578.80 Safari/537.36
工作选项卡:
Intl.DateTimeFormat().resolvedOptions().timeZone = undefined
new Date().toString() = "Mon Dec 24 2018 16:09:55 GMT-0700 (GMT-07:00)"
(new Date()).getTimezoneOffset() = 420
(new Date()).getHours() = 16
Run Code Online (Sandbox Code Playgroud)
失败的选项卡:
Intl.DateTimeFormat().resolvedOptions().timeZone = "Etc/Unknown"
new Date().toString() = "Mon Dec 24 2018 23:09:44 GMT+0000 (GMT)"
(new Date()).getTimezoneOffset() = 0
(new Date()).getHours() …Run Code Online (Sandbox Code Playgroud) 我正在使用 C# 程序处理日期。
我想过滤任何具有 DateTime、DateTime2、DateTimeOffset 列的表。
我将LastRefreshDateas存储DateTimeOffSet为 UTC,并使用它来过滤这些表上的数据。我调整偏移量(使用NodaTime)LastRefreshDate我根据用于在这些表中存储日期的时区通常,它是由用户给出的。
所以我创建了一个测试样本来解释这个问题。通常,SQL 查询是动态的,参数也是动态的。这是示例代码:
[TestMethod]
public void Test()
{
using (SqlConnection connection = new SqlConnection("Server=myserver;Database=mydb;User ID=admin;Password=admin"))
{
connection.Open();
using (SqlCommand command = new SqlCommand("SELECT [TimeStamp] FROM [dbo].[DATA] WHERE [TimeStamp] >= @p0", connection))
{
string datestring = "2019-06-18 13:35:20.1133868 -04:00";
// Does not work
// DateTimeOffset p0 = DateTimeOffset.Parse(datestring, CultureInfo.InvariantCulture);
// Does work
DateTime p0 = DateTime.Parse(datestring, CultureInfo.InvariantCulture);
command.Parameters.AddWithValue("@p0", p0);
using (SqlDataReader reader = command.ExecuteReader())
{
var dataTable = …Run Code Online (Sandbox Code Playgroud) 我试图看看依靠执行 aconst myNewDate = new Date(dateString)然后使用 an的结果_.isDate(myNewDate)是否足以验证它是“有效日期”,但后来我想:我可以收到什么dateString?
我想到要执行以下操作:
for(i=0;i<110;i++) { console.log(i, new Date(String(i)))}
这是我得到的结果:
0 2000-01-01T06:00:00.000Z
1 2001-01-01T06:00:00.000Z
2 2001-02-01T06:00:00.000Z
3 2001-03-01T06:00:00.000Z
4 2001-04-01T06:00:00.000Z
5 2001-05-01T05:00:00.000Z
6 2001-06-01T05:00:00.000Z
7 2001-07-01T05:00:00.000Z
8 2001-08-01T05:00:00.000Z
9 2001-09-01T05:00:00.000Z
10 2001-10-01T05:00:00.000Z
11 2001-11-01T06:00:00.000Z
12 2001-12-01T06:00:00.000Z
13 Invalid Date
14 Invalid Date
15 Invalid Date
16 Invalid Date
17 Invalid Date
18 Invalid Date
19 Invalid Date
20 Invalid Date
21 Invalid Date
22 Invalid Date
23 Invalid Date
24 …Run Code Online (Sandbox Code Playgroud) 为了处理日期,我public在我的应用程序中使用了一个jQuery UI 方法:jQuery.datepicker.formatDate参见params&source here:https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui .datepicker.js
但是,根据计算机时区,有时会显示错误的日期.
在这里演示:http://jsfiddle.net/7ACdB/
在Windows中使用UTC + 1(巴黎)时区,我得到:
03/30/20
03/30/20
Run Code Online (Sandbox Code Playgroud)
在Windows中使用UTC-6(我们和加拿大)时区,我得到了:
03/29/20 <- meh!
03/30/20
Run Code Online (Sandbox Code Playgroud)
更改操作系统时区时,您需要重新启动浏览器(至少适用于谷歌浏览器).
我的问题是您可以想象的"03/29/20"日期.
有人可以向我解释这是正常还是jquery ui问题?
我开始认为在美国时区看到"1970年3月30日00:00:00 GMT + 0200(浪漫日光时间)"为03/29/20是正常的,但我不太确定.: - /
我的总部设在英国,并且正在努力应对夏令时BST和时区.
这是我的代码:
TIME_OFFSET = 1 # 0 for GMT, 1 for BST
def RFC3339_to_localHHMM(input):
# Take an XML date (2013-04-08T22:35:00Z)
# return e.g. 08/04 23:35
return (datetime.datetime.strptime(input, '%Y-%m-%dT%H:%M:%SZ') +
datetime.timedelta(hours=TIME_OFFSET)).strftime('%d/%m %H:%M')
Run Code Online (Sandbox Code Playgroud)
设置这样的变量感觉非常错误,但我找不到任何优雅的方法来实现上述而没有大量的代码.我错过了什么,是否有办法(例如)读取系统时区?
我正在尝试检查isDST()(如果启用夏令时,则返回true或false)。如果我使用当前日期时间,则效果很好-例如,var isdst = moment()。isDST()对于我的时区返回true。但是,我要做的是先设置时区偏移,然后检查夏令时是否在该时区中处于活动状态。我下面有以下代码。
var isdst = moment('2014-03-28').zone('+01:00');
console.log('daylight savings for +0100 is ' + isdst); //returns true when it should return false
Run Code Online (Sandbox Code Playgroud)
如果您查看+0100时区(欧洲联盟国家)的夏令时,该日期直到2014年3月30日才生效。但是,上面的代码实际上在3月28日才返回true,但实际上不应该(直到2天后)。您可以在http://www.worldtimezone.com/daylight.html上查看其他国家/地区的DST 。
我进行了更多测试,似乎代码在运行时考虑了我自己的时区(美国东部标准)。如果您在上面看到网站,那么东部标准夏令时将从2014年3月9日开始。如果我在3月9日之前的几天测试代码,则返回false(即3月8日)。如果我在3月11日进行测试,则返回true。这告诉我,它没有考虑区域(“ +0100”),而是以某种方式使用了我的时区...为什么?如何设置momentjs日期的时区?我查看了文档(http://momentjs.com/docs/),它说这是正确的方法,但是对我不起作用。
如标题中所述,Highcharts显示下个月而不是我想要显示的正确月份.
<script>
$(function () {
Highcharts.setOptions({
global: {
//timezoneOffset: 3.30 * 60
}
});
$('#container').highcharts({
xAxis: {
type: 'datetime',
tickInterval: 3600 * 1000,
min: Date.UTC(2016,02,20),
max: Date.UTC(2016,02,21),
},
series: [{
data: [
[Date.UTC(2016, 02, 20,0,45), 1],
[Date.UTC(2016, 02, 20,12,15), 3],
[Date.UTC(2016, 02, 20,14,30), 6],
[Date.UTC(2016, 02, 20,15,45), 9],
[Date.UTC(2016, 02, 20,17,45), 5],
],
pointStart: Date.UTC(2016, 02, 20),
pointInterval: 3600 *1000
}]
});
});
</script>
<div id="container"></div>
Run Code Online (Sandbox Code Playgroud)
因此,根据我提供的代码,我希望它在xAxis中显示Feb,但它会跳转到March.
如何修复此问题以显示我想要的月份?
Highcharts是否使用用户时区?如何显示固定时区并避免使用用户时区?
给定一个LocalTime给定的ZoneId,如何找到调整后LocalTime的UTC?
我在寻找类似的东西.atZone从LocalDateTime,但没有发现任何东西.
我怀疑我可以使用它atOffset,但我真的不明白如何使用它.
例如:
LocalTime: 15:00
ZoneId: America/Sao_Paulo (GMT -3)
Output: 18:00
Run Code Online (Sandbox Code Playgroud) 如果您指定IANA给定的时区名称,Javascript允许您查看其在另一个时区的时间.例如:
new Date().toLocaleString("en-US", {timeZone: "America/Chicago"});
Run Code Online (Sandbox Code Playgroud)
您可以在下面看到IANA在每个常规时区内提供多个名称:
America/New_York Eastern (most areas)
America/Detroit Eastern - MI (most areas)
America/Kentucky/Louisville Eastern - KY (Louisville area)
America/Kentucky/Monticello Eastern - KY (Wayne)
America/Indiana/Indianapolis Eastern - IN (most areas)
America/Indiana/Vincennes Eastern - IN (Da, Du, K, Mn)
America/Indiana/Winamac Eastern - IN (Pulaski)
America/Indiana/Marengo Eastern - IN (Crawford)
America/Indiana/Petersburg Eastern - IN (Pike)
America/Indiana/Vevay Eastern - IN (Switzerland)
America/Chicago Central (most areas)
America/Indiana/Tell_City Central - IN (Perry)
America/Indiana/Knox Central - IN (Starke)
America/Menominee Central - …Run Code Online (Sandbox Code Playgroud) 我们将日期存储在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