Java 2020-12-16T16:27:57的日期格式解析异常;00:00
我不确定日期是什么,但我很确定是yyyy-MM-dd'T'HH:MM:ssJava 2020-12-16T16:27:57的日期格式解析异常;00:00,java,date,datetime,simpledateformat,java-time,Java,Date,Datetime,Simpledateformat,Java Time,我不确定日期是什么,但我很确定是yyyy-MM-dd'T'HH:MM:ssZZ:ZZ之类的。我在猜z是从哪里来的 正确的格式是什么?如何将其转换为ms 我也试过了 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss`ZZ:ZZ`"); sdf.parse("2020-12-16T16:27:57+00:00"); 我从minecraft j
ZZ:ZZ
之类的。我在猜z是从哪里来的
正确的格式是什么?如何将其转换为ms
我也试过了
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss`ZZ:ZZ`");
sdf.parse("2020-12-16T16:27:57+00:00");
我从minecraft json文件中获取它。我拒绝使用joda时间,因为minecraft最初是用Java5编写的,没有使用joda时间来完成。它们后来更新为Java7OffsetDateTime.parse(“2020-12-16T16:27:57+00:00”)
永远不要使用SimpleDataFormat
或其他几年前被现代java.time类取代的糟糕的日期时间类
在解析/生成表示日期时间值的字符串时,java.time类默认使用标准格式。您的输入是这些标准格式之一。因此,无需指定格式化模式
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 该项目现已启动,建议迁移到类 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类。Hibernate5和JPA2.2支持java.time
从哪里获得java.time类
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- 带来了一些小功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- Android(26+)的更高版本捆绑了java.time类的实现
- 对于早期的Android(
永远不要使用OffsetDateTime.parse(“2020-12-16T16:27:57+00:00”)
或其他几年前被现代java.time类取代的糟糕的日期时间类 默认情况下,java.time类在解析/生成表示日期时间值的字符串时使用标准格式。您的输入采用这些标准格式之一。因此无需指定格式模式SimpleDataFormat
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如,& 要了解更多信息,请参阅.和搜索堆栈溢出以获取许多示例和解释。规范为 该项目现已启动,建议迁移到类 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
classes。Hibernate 5和JPA 2.2支持java.time 从哪里获得java.time类java.sql.*
- 、和更高版本-标准Java API的一部分,带有捆绑实现。
- 带来了一些小功能和修复
- 及
- 大多数java.time功能都在中向后移植到Java6和Java7
-
- Android(26+)的更高版本捆绑了java.time类的实现
- 对于早期的Android(找到了答案
算出Instant instant = Instant.parse("2020-12-16T16:27:57+00:00");
java.timeInstant instant = Instant.parse("2020-12-16T16:27:57+00:00");
的日期时间API及其格式化APIjava.util
已过时且容易出错。建议完全停止使用它们并切换到SimpleDataFormat
- 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
- 如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认
import java.time.OffsetDateTime; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { String strDateTime = "2020-12-16T16:27:57+00:00"; OffsetDateTime odt = OffsetDateTime.parse(strDateTime); System.out.println(odt); System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli()); // Alternatively System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond())); } }
2020-12-16T16:27:57Z No of milliseconds from Epoch: 1608136077000 No of milliseconds from Epoch: 1608136077000
由于日期时间字符串符合格式,您可以直接将其解析(即不使用import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws ParseException { String strDateTime = "2020-12-16T16:27:57+00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH); Date date = sdf.parse(strDateTime); System.out.println(date); System.out.println("No of milliseconds from Epoch: " + date.getTime()); // Given below is how you can convert the legacy type, java.util.Date to the // modern type java.time.Instant Instant instant = date.toInstant(); System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli()); } }
)到DateTimeFormatter
OffsetDateTime
输出:* parse them zula times. example: 2010-09-18T21:35:15.000Z */ public static long parseZTime(String strTime) { return Instant.parse(strTime).toEpochMilli(); } /** * parse the offset times. example: 2015-11-10T16:43:29-0500 and 2014-05-14T17:29:23+00:00 */ public static long parseOffsetTime(String strTime) { return OffsetDateTime.parse(strTime).toInstant().toEpochMilli(); }
import java.time.OffsetDateTime; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { String strDateTime = "2020-12-16T16:27:57+00:00"; OffsetDateTime odt = OffsetDateTime.parse(strDateTime); System.out.println(odt); System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli()); // Alternatively System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond())); } }
2020-12-16T16:27:57Z No of milliseconds from Epoch: 1608136077000 No of milliseconds from Epoch: 1608136077000
你的答案出了什么问题?import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws ParseException { String strDateTime = "2020-12-16T16:27:57+00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH); Date date = sdf.parse(strDateTime); System.out.println(date); System.out.println("No of milliseconds from Epoch: " + date.getTime()); // Given below is how you can convert the legacy type, java.util.Date to the // modern type java.time.Instant Instant instant = date.toInstant(); System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli()); } }
- 使用
而不是单个ZZ:ZZ
:检查以了解更多信息。此外,我不确定您是否在引号中包含了X
,用于格式化代码,只是为了将其作为代码突出显示,还是在实际代码中确实这样做了。请确保您从未在引号中包含ZZ:ZZ
单引号;否则,它将仅表示Z
作为字符文字而不是时区。请检查以更好地理解它Z
- 尽管此解析不是强制性的,但您不应该在没有
区域设置的情况下使用
或SimpleDataFormat
。请检查以更好地理解它DateTimeFormatter
使用传统API:
import java.time.OffsetDateTime; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { String strDateTime = "2020-12-16T16:27:57+00:00"; OffsetDateTime odt = OffsetDateTime.parse(strDateTime); System.out.println(odt); System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli()); // Alternatively System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond())); } }
2020-12-16T16:27:57Z No of milliseconds from Epoch: 1608136077000 No of milliseconds from Epoch: 1608136077000
输出:import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws ParseException { String strDateTime = "2020-12-16T16:27:57+00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH); Date date = sdf.parse(strDateTime); System.out.println(date); System.out.println("No of milliseconds from Epoch: " + date.getTime()); // Given below is how you can convert the legacy type, java.util.Date to the // modern type java.time.Instant Instant instant = date.toInstant(); System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli()); } }
import java.time.OffsetDateTime; import java.util.concurrent.TimeUnit; public class Main { public static void main(String[] args) { String strDateTime = "2020-12-16T16:27:57+00:00"; OffsetDateTime odt = OffsetDateTime.parse(strDateTime); System.out.println(odt); System.out.println("No of milliseconds from Epoch: " + odt.toInstant().toEpochMilli()); // Alternatively System.out.println("No of milliseconds from Epoch: " + TimeUnit.SECONDS.toMillis(odt.toEpochSecond())); } }
2020-12-16T16:27:57Z No of milliseconds from Epoch: 1608136077000 No of milliseconds from Epoch: 1608136077000
请注意,import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.Instant; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws ParseException { String strDateTime = "2020-12-16T16:27:57+00:00"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX", Locale.ENGLISH); Date date = sdf.parse(strDateTime); System.out.println(date); System.out.println("No of milliseconds from Epoch: " + date.getTime()); // Given below is how you can convert the legacy type, java.util.Date to the // modern type java.time.Instant Instant instant = date.toInstant(); System.out.println("No of milliseconds from Epoch: " + instant.toEpochMilli()); } }
对象不像;而是表示自称为“历元”的标准基准时间起的毫秒数,即java.util.Date
(或UTC)。当您打印1970年1月1日00:00:00 GMT
的对象时,其java.util.Date
方法返回JVM时区中的日期时间,根据该毫秒值计算。如果您需要在不同的时区中打印日期时间,则需要将时区设置为toString
,并从中获取格式化字符串java.timeSimpleDataFormat
的日期时间API及其格式化APIjava.util
已过时且容易出错。建议完全停止使用它们并切换到SimpleDataFormat
- 无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7
- 如果您正在为Android项目工作,并且您的Android API级别仍然不是complia
- 、和更高版本-标准Java API的一部分,带有捆绑实现。