由于iOS的7,NSDateFormatter 确实当与此格式的字符串呈现的确创造一个NSDate:
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setDateFormat:@"@"yyyy'-'MM'-'dd'T'HH':'mm':'ssZ""];
NSLog(@"non–nil date, even honoring the 7–minute–offset in the time–zone on iOS 7: %@",
[formatter dateFromString:@"2011-07-12T18:07:31+02:07"]);
Run Code Online (Sandbox Code Playgroud)
对于iOS 6,答案是不使用NSDateFormatter ......
好的,到目前为止我已经读过了
关于如何使用NSDateFormatter以创建NSDate一个字符串.
我偶然发现了Peter Hosey的ISO8601DateFormatter.
看看他的实施,我想知道:
是不是有什么办法,既正确和理智来得到这样一个字符串2011-07-12T18:07:31+02:00到NSDate?
GMT前缀"+" - 符号,那将是没有问题的,但......我可以破解它为我的应用程序工作(使用格式@"yyyy'-'MM'-'dd'T'HH':'mm':'ssz':'00"),但这当然是不正确的,因为它会丢弃时区的分钟信息.
我也可以用空字符串替换最后一个冒号,但我也认为这也是一个黑客.
那么,是否有一些秘密的酱汁NSDateFormatter从上面拿出那根绳子给我一个有效和正确的NSDate?
我找到了一个小贴士,可以+[NSDate dateWithNaturalLanguageString:] …
有一种简单的方法来从特定时区获取javascript中的unix时间戳吗?例如,我希望客户端发送一个unix时间戳,但我想让它与我的时区相匹配.
谢谢!
对于 REST Web 服务,我需要返回带有时区的日期(无时间)。
ZonedDate显然, Java 中没有 a 这样的东西(只有LocalDate和ZonedDateTime),所以我使用它ZonedDateTime作为后备。
将这些日期转换为 JSON 时,我使用DateTimeFormatter.ISO_OFFSET_DATE格式化日期,效果非常好:
DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE;
ZonedDateTime dateTime = ZonedDateTime.now();
String formatted = dateTime.format(formatter);
Run Code Online (Sandbox Code Playgroud)
2018-04-19+02:00
然而,尝试解析这样的日期......
ZonedDateTime parsed = ZonedDateTime.parse(formatted, formatter);
Run Code Online (Sandbox Code Playgroud)
...导致异常:
java.time.format.DateTimeParseException:无法解析文本“2018-04-19+02:00”:无法从 TemporalAccessor 获取 ZonedDateTime:{OffsetSeconds=7200},ISO 解析为 java 类型的 2018-04-19。时间.格式.解析
我也尝试过ISO_DATE并遇到了同样的问题。
我如何解析这样的分区日期?
或者是否有任何其他类型(在 Java Time API 内)我应该用于分区日期?
我需要转换GMT为亚利桑那州时间。亚利桑那州目前已MST关闭夏令时。
然而在 Joda TimeDateTimeZone代码中,MST已映射到America/Denver:
map.put("MST", "America/Denver");
Run Code Online (Sandbox Code Playgroud)
可以看出,目前丹佛实行夏令时,因此有MDT。DateTimeZone那么为什么要在代码中进行这样的映射呢?
在从 转换为亚利桑那州本地时区时GMT,我得到了偏移量,因为GMT-6这是错误的,而且应该是这样GMT-7,因为MST没有夏令时。
这是一个错误吗?如何解决问题?
我正在尝试使用此代码来解析带有时区的日期字符串进行测试:
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZZZZZ", Locale.US);
Calendar calendar = Calendar.getInstance();
calendar.setTime(sdf.parse("2017-07-26T06:00-06:00"));
int offset = calendar.getTimeZone().getRawOffset();
Run Code Online (Sandbox Code Playgroud)
我正在尝试将时区从 更改-06为+09,但offset始终包含10800000.
如何正确解析带有时区的日期(我需要时间和时区)?
ZonedDateTime我正在使用 JDK 8,并且Timestamp经常使用它。但我仍然无法解决我面临的问题。
假设我得到了TimestampGMT (UTC) 格式的文件,并且我的服务器位于某处。假设它设置为Asia/CalcuttaTimeZone (其 ZoneOffset 为+05:30)。
基本上如何在时间戳中添加/减去我的时区偏移量?
Input : 2017-09-13 13:10:30.333
Output: 2017-09-13 18:40:30.333
Run Code Online (Sandbox Code Playgroud)
解释 :在输入中,时区偏移量 5hrs 30mts 已添加到输入中。此外,输入是 Timestamp 类型,输出也是 Timestamp 类型。
我使用ZoneID.systemDefault()函数来检索 JVM 已知的时区。就我而言,时区结果是Asia/Calcutta.
我正在开发一个网络工具,目前遇到一个问题,在某些选项卡上,我得到的是 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) I have hourly data records that were recorded in local daylight time (for me this is US/Pacific). These will be read in through csv. A gap exists at the beginning of DST at 02:00 when we spring forward. In fall, I believe that the data collected at 01:00 PDT is labeled 01:00 and the next hour is labeled 02:00 (and assumes PST).
I would like to translate the timestamps so they play well with other data stored in PST. Below …
我试图看看依靠执行 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)