获得ISO 8601格式的当前时刻UTC的最优雅的方式是什么?它看起来应该像:2010-10-12 t8: 50z。
例子:
String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);
获得ISO 8601格式的当前时刻UTC的最优雅的方式是什么?它看起来应该像:2010-10-12 t8: 50z。
例子:
String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);
当前回答
乔达时间
更新:Joda-Time项目现在处于维护模式,团队建议迁移到java。时间类。对于Java 6和7,请参阅ThreeTen-Backport项目,在ThreeTenABP项目中进一步适应Android。
使用Joda-Time库…
String output = new DateTime( DateTimeZone.UTC ).toString() ;
这是线程安全的。Joda-Time创建新的不可变对象,而不是改变现有对象。
如果您真的想要一种没有秒的格式,解析为分钟,那么使用Joda-Time中许多其他内置格式化程序之一。
DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;
java.time
对于Java 8和更高版本,Joda-Time继续工作。但是内置的java。时间框架取代了约达时间。因此,将代码从Joda-Time迁移到java。时间越方便越好。
查看我的另一个现代解决方案的答案。
关于java.time
java。时间框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期-时间类,如java.util。日期,日历和简单日期格式。
Joda-Time项目现在处于维护模式,建议迁移到java。时间类。
要了解更多,请参阅Oracle教程。搜索Stack Overflow可以找到很多例子和解释。规范是JSR 310。
你可以交换java。Time对象直接使用数据库。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java。sql。*类。
从哪里获取java。时间类?
Java SE 8、Java SE 9、Java SE 10以及更高版本 内置的。 带有捆绑实现的标准Java API的一部分。 Java 9增加了一些小特性并进行了修复。 Java SE 6和Java SE 7 大部分的java。时间功能在ThreeTen-Backport中向后移植到Java 6和7。 安卓 后续版本的Android捆绑实现的java。时间类。 对于早期的Android (<26), ThreeTenABP项目适应ThreeTen-Backport(如上所述)。参见如何使用ThreeTenABP....
ThreeTen-Extra项目扩展了java。额外的课程时间。这个项目是未来可能添加到java.time的一个试验场。你可以在这里找到一些有用的类,比如Interval、YearWeek、YearQuarter等等。
其他回答
乔达时间
更新:Joda-Time项目现在处于维护模式,团队建议迁移到java。时间类。对于Java 6和7,请参阅ThreeTen-Backport项目,在ThreeTenABP项目中进一步适应Android。
使用Joda-Time库…
String output = new DateTime( DateTimeZone.UTC ).toString() ;
这是线程安全的。Joda-Time创建新的不可变对象,而不是改变现有对象。
如果您真的想要一种没有秒的格式,解析为分钟,那么使用Joda-Time中许多其他内置格式化程序之一。
DateTime now = new DateTime( DateTimeZone.UTC ) ;
String output = ISODateTimeFormat.dateHourMinute.print( now ) ;
java.time
对于Java 8和更高版本,Joda-Time继续工作。但是内置的java。时间框架取代了约达时间。因此,将代码从Joda-Time迁移到java。时间越方便越好。
查看我的另一个现代解决方案的答案。
关于java.time
java。时间框架内置于Java 8及更高版本中。这些类取代了麻烦的旧遗留日期-时间类,如java.util。日期,日历和简单日期格式。
Joda-Time项目现在处于维护模式,建议迁移到java。时间类。
要了解更多,请参阅Oracle教程。搜索Stack Overflow可以找到很多例子和解释。规范是JSR 310。
你可以交换java。Time对象直接使用数据库。使用符合JDBC 4.2或更高版本的JDBC驱动程序。不需要字符串,不需要java。sql。*类。
从哪里获取java。时间类?
Java SE 8、Java SE 9、Java SE 10以及更高版本 内置的。 带有捆绑实现的标准Java API的一部分。 Java 9增加了一些小特性并进行了修复。 Java SE 6和Java SE 7 大部分的java。时间功能在ThreeTen-Backport中向后移植到Java 6和7。 安卓 后续版本的Android捆绑实现的java。时间类。 对于早期的Android (<26), ThreeTenABP项目适应ThreeTen-Backport(如上所述)。参见如何使用ThreeTenABP....
ThreeTen-Extra项目扩展了java。额外的课程时间。这个项目是未来可能添加到java.time的一个试验场。你可以在这里找到一些有用的类,比如Interval、YearWeek、YearQuarter等等。
如果您不想包含Jodatime(尽管它很好)
javax.xml.bind.DatatypeConverter.printDateTime(
Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);
返回一个字符串:
2012-07-10T16:02:48.440Z
这与原始请求略有不同,但仍然是ISO-8601。
private static String getCurrentDateIso()
{
// Returns the current date with the same format as Javascript's new Date().toJSON(), ISO 8601
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US);
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormat.format(new Date());
}
Java 8:
thisMoment = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mmX")
.withZone(ZoneOffset.UTC)
.format(Instant.now());
Java 8 之前:
thisMoment = String.format("%tFT%<tRZ",
Calendar.getInstance(TimeZone.getTimeZone("Z")));
从文档中可以看出:
“R”24小时时钟格式为“%tH:%tM” “F”ISO 8601完整日期格式为“%tY-%tm-%td”。
我相信最简单的方法是先去instant,然后去字符串,比如:
String d = new Date().toInstant().toString();
这将导致:
2017 - 09 - 08 - t12:56:45.331z