如何解决这个问题,有谁能帮助我吗?
您的印度时间被正确地调整为比芝加哥时间提前10.5小时。功能,而不是bug。(我假设您的:56
秒是您的问题中的错别字。)
如果不希望进行此类调整,而是希望将相同的日期和相同的时间分配给不同的时区,则执行以下操作:
ZonedDateTime.parse(
"Mon May 9 09:34:13 CDT 2016" , // If at all possible, avoid using such an awful format for exchanging date-time strings. Always use standard ISO 8601 formats instead.
DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" )
) // Returns a `ZonedDateTime` object.
.withZoneSameLocal(
ZoneId.of( "Asia/Kolkata" )
) // Returns a fresh `ZonedDateTime` object, with values based on the original but for the change in assigned zone.
.toString() // Generates a String is standard ISO 8601 format, extending the standard by appending the name of the time zone in square brackets.
2016-05-09T09:34:13+05:30“亚洲/加尔各答”
我们得到了相同的日期和时间,但不同的OFFSET-FORM-UTC意味着这是一个不同的时刻,时间线上的一个不同的点。
[注意:我假设您的Mon May 09 20:04:56 IST 2016
中的:56
是一个错别字,应该是:13
。]
字符串Mon May 9 09:34:13 CDT 2016
和Mon May 09 20:04:13 IST 2016
表示同一时刻。这是一个特性,而不是一个bug。如果CDT
指的是一个时区,如America/Chicago
,则该日期的值表示UTC后5小时的时刻,-05:00
。如果所说的IST
是指一个时区,如亚洲/加尔各答
,则该日期的印度比UTC提前五个半小时,+05:30
。把这些偏移加在一起,我们得到十个半小时的差值。这符合:09:34:13
加上10.5小时等于20:04:13
。
也就是说,如果芝加哥的某个人正在和加尔各答的某个人通电话,如果他们都抬头看自家墙上时钟上的时间,一个会看到09:34:13,而另一个会看到20:04:13。
也许您想故意不针对时区进行调整,而是在不同的时区中重新创建具有相同时间的相同日期。这将不是同一时刻,这将是时间线上的一个不同点。这类代码见下文。
您使用的是很久以前被现代java.time类取代的麻烦的旧类。
Instant instant = Instant.now() ; // Capture current moment in UTC.
ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Same moment, same point on the timeline, but different wall-clock time.
此外,不要使用3-4个字母的伪时区,如CDT
或IST
。这些不是真正的时区,不是标准化的,而且许多不是唯一的(!)。使用全时区名称是IANA指定的大陆/地区
格式。
但是直接回答您的问题,解析字符串Mon May 9 09:34:13 CDT 2016
。定义要匹配的格式模式。
String input = "Mon May 9 09:34:13 CDT 2016";
DateTimeFormatter f = DateTimeFormatter.ofPattern( "EEE MMM d HH:mm:ss z uuuu" );
ZonedDateTime zdt = ZonedDateTime.parse( input , f );
ZDT.ToString():2016-05-09T09:34:13-05:00[美国/芝加哥]
ZoneId zKolkata = ZoneId.of( "Asia/Kolkata" );
ZonedDateTime zdtKolkata = zdt.withZoneSameInstant( zKolkata );
ZdtKolkata.ToString():2016-05-09T20:04:13+05:30“亚洲/加尔各答”
与您在遗留类中看到的行为相同。把10.5小时延长到9:34:13,我们得到20:04:13。同样的时刻,同样的时间线上的点,却不同的挂钟时间。
但是,如果您想要相同的日期和相同的时间,但却切换了时区,那该怎么办呢?这将导致不同的时刻,时间线上的不同点(假设两个区域不共享相同的偏移量)。ZonedDateTime
通过ZonedDateTime::WithZoneSameLocal(ZoneId zone)
方法支持此操作。
ZonedDateTime zdtSameLocalKolkata = zdt.withZoneSameLocal( zKolkata );
您可以通过将两者调整为UTC来验证它们是不同时刻的事实。进行这种调整的简单方法是提取instant
对象。根据定义,即时
始终是UTC格式。
Instant instantOfZdtChicago = zdt.toInstant() ;
Instant instantOfZdtSameLocalKolkata = zdtSameLocalKolkata.toInstant():
InstantoFZDtChicago.ToString():2016-05-09T14:34:13Z
InstantOfzdtSameloCalkolkata.ToString():2016-05-09T04:04:13Z
您可以直接与数据库交换java.time对象。使用与JDBC4.2或更高版本兼容的JDBC驱动程序。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
我需要将长数据格式(long)转换为宽格式(wide),条件如下(如果可能): 1) 所有数据文件都将是具有相同结构(id、名称、值)的长格式(long),但每个数据文件将具有不同的变量、值和变量数: 2) 每个数据文件将是不同的变量混合物(因子、整数、数字)。有些因素可能每个案例都有多个级别(从长远来看是水果和肉),我想为这些因素中的每个级别创建一个单独的虚拟变量(逻辑)。因子和数值变量的数量将
Excel转KML 在“数据处理”菜单栏中,点击“Excel转KML”,弹出对话框,点击打开XLS,选择要转换的Excel文件(可以添加LSV文件夹下示例数据中的EXCEL2KML示例数据.xls进行测试),读取完成后,可以在上方的表格里看到Excel里的信息。在Excel表格内容的下面分了两块,左侧一块为经纬度和气泡内容的选择,右侧一块是对要生成的kml图层的风格的设置。
问题内容: 我有一些格式的数据: 我需要将其转换为格式 如何在SQL中执行此操作? 问题答案: 如果您的得分列是固定的,并且不需要汇总,则可以使用多个和语句来生成所需的数据形状。例如 SQL小提琴:http://sqlfiddle.com/#!6 / f54b2 / 4/0
上边格式如何转换为以下格式
我试图用GSON将一个对象转换成JSON格式。然后,我将把JSON发送给用php编写的webservice。不幸的是,由于某种原因,gson.toJson(object)方法不起作用。 我有这个java对象干预(它包含字符串、日期、时间和位图类型的几个字段)。当我尝试这样做时: 我在gson变量中得到这个: gson={seralizeNulls: false工厂:[Factory[type=co
我现在正在解析一个26页的文件。带有图像、表格、斜体和下划线的docx。我能清除 我使用ApachePOI创建了带有XWPF段落列表的XWPF文档格式。当我遍历XWPF段落时,如果一个段落包含不同的样式,我无法获得各行的样式(斜体、下划线、粗体)。 我尝试过使用XWPF。段落getrun()。XWPF。。。跑getfamilyfont()我将得到null。但是当我运行XWPF时,我在段落级别获得数