我在angular 6应用程序中具有此Date值:
expires_at: Date;
在Java getter中,我使用String来获取值:
private String expires_at;
但是当我使用以下代码进行转换时:
从字符串到LocalDateTime
terminals.setExpires_at(LocalDateTime.parse(terminalDTO.getExpires_at()));
从LocalDateTime到String:
terminalNewDTO.setExpires_at(DateTimeFormatter.ISO_LOCAL_DATE_TIME.format(terminals.getExpires_at()));
我收到此错误:
create] due to exception [Text '2019-02-19T01:00:00.000Z' could not be parsed, unparsed text found at index 23]
20:55:43,494 INFO [stdout] (default task-1) java.time.format.DateTimeParseException: Text '2019-02-19T01:00:00.000Z' could not be parsed, unparsed text found at index 23
20:55:43,494 INFO [stdout] (default task-1) at java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2049)
20:55:43,494 INFO [stdout] (default task-1) at java.base/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1948)
20:55:43,495 INFO [stdout] (default task-1) at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:492)
20:55:43,495 INFO [stdout] (default task-1) at java.base/java.time.LocalDateTime.parse(LocalDateTime.java:477)
20:55:43,496 INFO [stdout] (default task-1) at deployment.datalis_admin.war//org.datalis.admin.backend.mapper.TerminalsMapperImpl.map(TerminalsMapperImpl.java:98)
20:55:43,496 INFO [stdout] (default task-1) at deployment.datalis_admin.war//org.datalis.admin.backend.restapi.TerminalController.create(TerminalController.java:104)
20:55:43,496 INFO [stdout] (default task-1) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
20:55:43,497 INFO [stdout] (default task-1) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
20:55:43,497 INFO [stdout] (default task-1) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
20:55:43,497 INFO [stdout] (default task-1) at java.base/java.lang.reflect.Method.invoke(Method.java:566)
20:55:43,497 INFO [stdout] (default task-1) at deployment.datalis_admin.war//org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:189)
您知道我可以解决这个问题吗?
这是日期值:我尝试发送的2/20/19, 3:00 AM
。
参考方案
世界标准时间Z
表示零时分秒的offset-from-UTC。换句话说,UTC本身。 Z
发音为“Zulu”。
使用Instant
类进行解析,该类表示UTC中的时刻。
Instant instant = Instant.parse( "2019-02-19T01:00:00.000Z" ) ;
该输入字符串为标准ISO 8601格式。 java.time类使用ISO 8601格式作为解析和生成字符串的默认格式。
instant.toString() // generates a ISO 8601 string.
UTC提前两小时
您在问题中说:
这是日期值:2/20/19,3:00 AM
如果原始值为3 AM,则显然是在UTC之前两个小时的时区中。您可以在list in Wikipedia中看到这可能是几个时区中的任何一个(请注意,该列表可能不是最新的)。
我将随意使用Africa/Tripoli
。
ZoneId z = ZoneId.of( "Africa/Tripoli" ) ;
ZonedDateTime zdt = instant.atZone( z ) ; // Adjust from UTC to a time zone. Same moment, same point on the timeline, different wall-clock time.
instant
和zdt
都表示时间轴上的同一时刻,同一同时点。通过两个不同地区的人民使用的挂钟时间可以看到这一时刻。
想象一下,利比亚的某人叫冰岛的某人。聊天时,他们俩都抬头看着各自墙上的时钟。 Iceland clocks使用距UTC的偏移量为零,而in Libya则比UTC 提前两小时。因此,利比亚的凌晨3点在冰岛为凌晨1点。
看到这个code run live at IdeOne.com。
Instant.toString():2019-02-19T01:00:00Z
zdt.toString():2019-02-19T03:00 + 02:00 [非洲/的黎波里]LocalDateTime
类不是暂时的
从LocalDateTime到String:
跟踪时刻时切勿使用LocalDateTime
。 LocalDateTime
仅仅是日期和时间,仅此而已。如果没有时区或从UTC偏移的上下文,则LocalDateTime
无法表示时刻。它代表了大约26-27小时(全球当前时区范围)内的潜在时刻。LocalDateTime
就像说“今年1月23日中午”。您是指日本东京中午还是印度加尔各答中午?也许是法国巴黎?蒙特利尔魁北克省?这些地方的中午发生在不同的时刻,彼此之间经过了几个小时。LocalDateTime
中的“本地”是指任何地点或每个地点,但是不是是指任何特定地点。
关于java.time
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如 java.util.Date
, Calendar
和 SimpleDateFormat
。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
现在位于Joda-Time中的maintenance mode项目建议迁移到java.time类。
您可以直接与数据库交换java.time对象。使用兼容JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展了java.time。该项目是将来可能向java.time添加内容的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
和more。
我正在使用java playframework2,但似乎无法获得正确的IP地址。每次请求后,它都会不断变化。我的意思是,流量分析网站在标头中实现javascript来分析您的流量,因此使用javascript应该可以吗?如果框架不提供此类功能,是否还有其他方法可以从客户端获取IP?我想建立一个访客计数器,但是它应该只统计唯一身份的访客。也许我不必使用IP地址…
用于客户端通知的AMQP或XMPP - java我正在设计一个自定义消息传递系统的替代品,该系统目前用于从服务器端(Java)通知JavaScript Web应用程序有关更改的内容。该旧版消息传递系统通过使用基于自定义文本的协议和纯Java套接字,通过Flash XMLSocket进行工作。替换将不仅由Web应用程序(通过Web套接字而不是Flash)使用,而且还将由用C#编写的其他桌面客户端应用程序使用…
需要登录后才能访问网址 - javascript好的,所以我对如何解决这个问题感到非常困惑。我有一个名为“ index.html”的主页。它具有一个说“创建帐户”的按钮,该按钮允许您创建一个帐户;如果您已经有一个帐户,则另一个按钮可以链接到登录页面。登录帐户后,您会进入一个名为“ browse.html”的页面,在这里您可以观看所有可以观看的电影。我只是想不通如何将尝试访问URL的人从URL重定向到登录页…
javascript popupwindow之后的行如何工作? - javascript好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…
想要在Java中发送十六进制字符串数据 - java我在char []数组中有Integer数据。例如:12、03、10。我想以十六进制格式以字符串形式发送数据。例如:0C030A但是转换为十六进制后,我得到的是C3A。请建议我将正确的数据作为0C030A。我正在使用以下代码String messageBody = "A3"; SimpleDateFormat sdf = new Simp…