Java 这个日期格式是什么?2011-08-12T20:17:46.384Z
我有以下日期:Java 这个日期格式是什么?2011-08-12T20:17:46.384Z,java,date,time,format,simpledateformat,Java,Date,Time,Format,Simpledateformat,我有以下日期:2011-08-12T20:17:46.384Z。这是什么格式?我试图通过DateFormat.getDateInstance().parse(dateStr)用Java1.4解析它,我得到了 java.text.ParseException:无法解析的日期:“2011-08-12T20:17:46.384Z” 我想我应该使用它进行解析,但我必须先知道格式字符串。到目前为止,我所能做的就是yyyy-MM-dd,因为我不知道t在这个字符串中是什么意思——与时区相关的东西?此日期字符串
2011-08-12T20:17:46.384Z
。这是什么格式?我试图通过DateFormat.getDateInstance().parse(dateStr)
用Java1.4解析它,我得到了
java.text.ParseException:无法解析的日期:“2011-08-12T20:17:46.384Z”
我想我应该使用它进行解析,但我必须先知道格式字符串。到目前为止,我所能做的就是
yyyy-MM-dd
,因为我不知道t
在这个字符串中是什么意思——与时区相关的东西?此日期字符串来自上显示的lcmis:downloadedOn
标记。不确定Java解析,但这是ISO8601:不确定Java解析,但这是ISO8601:T只是一个将日期与时间分开的文字,Z表示“零小时偏移量”,也称为“祖鲁时间”(UTC)。如果字符串始终具有“Z”,则可以使用:
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
或者使用,您可以使用。T只是一个用于将日期与时间分开的文字,Z表示“零小时偏移量”,也称为“祖鲁时间”(UTC)。如果字符串始终具有“Z”,则可以使用:
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
format.setTimeZone(TimeZone.getTimeZone("UTC"));
或者使用,你可以使用。tl;博士
输入字符串使用标准格式
Instant.parse ( "2011-08-12T20:17:46.384Z" )
ISO 8601
该格式由合理实用标准定义
T
将日期部分与时间部分分开。末端的Z
表示(即,与UTC的偏移为零小时分秒)。Z
是
java.time
与最早版本的Java捆绑在一起的旧日期时间类被证明是设计拙劣、混乱和麻烦的。避开它们
相反,请使用内置于Java8及更高版本中的框架。time类取代了旧的日期时间类和非常成功的Joda时间库
默认情况下,java.time类在解析/生成日期时间值的文本表示时使用
该类表示时间线上的一个时刻,分辨率为。该类可以直接解析输入字符串,而无需费心定义格式模式
Instant instant = Instant.parse ( "2011-08-12T20:17:46.384Z" ) ;
关于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(tl;dr
输入字符串使用标准格式
ISO 8601 该格式由合理实用标准定义Instant.parse ( "2011-08-12T20:17:46.384Z" )
将日期部分与一天中的时间部分分开。末尾的T
表示(即,与UTC的偏移为零小时分秒)。Z表示 java.time 与最早版本的Java捆绑在一起的旧日期时间类被证明是设计拙劣、混乱和麻烦的。避免它们 相反,使用Java 8及更高版本中内置的框架。Java.time类取代了旧的日期时间类和非常成功的Joda时间库 默认情况下,java.time类在解析/生成日期时间值的文本表示时使用 该类表示时间线上的某个时刻,分辨率为。该类可以直接解析输入字符串,而无需费心定义格式模式Z
Instant instant = Instant.parse ( "2011-08-12T20:17:46.384Z" ) ;
关于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(有其他方法来解析它,而不是第一个答案。要解析它:
(1) 如果要获取有关日期和时间的信息,可以将其解析为
(自Java8)或ZonedDatetime
(旧)对象: 或 (2) 如果您不在乎日期和时间,只想将信息视为纳秒级的瞬间,那么您可以使用date
:Instant
// The ISO format without zone ID is Instant's default. // There is no need to pass any format. Instant ins = Instant.parse("2011-08-12T20:17:46.384Z");
除了第一个答案,还有其他方法可以解析它。要解析它:
(1) 如果要获取有关日期和时间的信息,可以将其解析为
(自Java8)或ZonedDatetime
(旧)对象: 或 (2) 如果您不在乎日期和时间,只想将信息视为纳秒级的瞬间,那么您可以使用date
:Instant
你可以用t// The ISO format without zone ID is Instant's default. // There is no need to pass any format. Instant ins = Instant.parse("2011-08-12T20:17:46.384Z");
Date date = format(UTC, "2020-04-19T00:30:07.000Z")
String date = parse(UTC, new Date())
String str = "20190927T182730.000Z" LocalDateTime fin; fin = LocalDateTime.parse( str, DateTimeFormatter.ofPattern("yyyyMMdd'T'HHmmss.SSSZ") );
Exception in thread "main" java.time.format.DateTimeParseException: Text '20190927T182730.000Z' could not be parsed at index 19
public static long timestampToEpochSeconds(String srcTimestamp) { long epoch = 0; try { if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { Instant instant = Instant.parse(srcTimestamp); epoch = instant.getEpochSecond(); } else { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss.SSSSSS'Z'", Locale.getDefault()); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); Date date = sdf.parse(srcTimestamp); if (date != null) { epoch = date.getTime() / 1000; } } } catch (Exception e) { e.printStackTrace(); } return epoch; }
let isoDateTimeString = new Date().toISOString();
import java.time.Instant; import java.time.OffsetDateTime; import java.time.ZonedDateTime; public class Main { public static void main(String[] args) { String strDateTime = "2011-08-12T20:17:46.384Z"; Instant instant = Instant.parse(strDateTime); OffsetDateTime odt = OffsetDateTime.parse(strDateTime); ZonedDateTime zdt = ZonedDateTime.parse(strDateTime); System.out.println(instant); System.out.println(odt); System.out.println(zdt); } }
2011-08-12T20:17:46.384Z 2011-08-12T20:17:46.384Z 2011-08-12T20:17:46.384Z
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Locale; public class Main { public static void main(String[] args) throws ParseException { String strDateTime = "2011-08-12T20:17:46.384Z"; SimpleDateFormat sdf = new SimpleDateFormat("y-M-d'T'H:m:s.SSSXXX", Locale.ENGLISH); Date date = sdf.parse(strDateTime); // ... } }
sdf.setTimeZone(TimeZone.getTimeZone("Etc/UTC")); String formatted = sdf.format(date); System.out.println(formatted); // 2011-8-12T20:17:46.384Z
import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; public class Main { public static void main(String[] args) { String dateTimeStr = "2011-08-12T20:17:46.384Z"; DateTimeFormatter dtf = DateTimeFormat.forPattern("y-M-d'T'H:m:s.SSSZ").withOffsetParsed(); DateTime dateTime = dtf.parseDateTime(dateTimeStr); System.out.println(dateTime); } }
2011-08-12T20:17:46.384Z
- 、和更高版本-标准Java API的一部分,带有捆绑实现。