获得ISO 8601格式的当前时刻UTC的最优雅的方式是什么?它看起来应该像:2010-10-12 t8: 50z。

例子:

String d = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);

当前回答

博士tl;

其他一些答案在推荐java时是正确的。时间类,但会使用不必要的长度来满足您的特定需求。

Instant.now()                               // Capture the current moment in UTC with a resolution as fines nanoseconds but usually in microseconds or milliseconds.
       .truncatedTo( ChronoUnit.MINUTES )   // Lop off any seconds or fractional second, to get a value in whole minutes.
       .toString()                          // Generate a String in standard ISO 8601 format where a `T` separates the year-month-day from the hour-minute-second, and the `Z` on the end for “Zulu” means UTC.

2018 - 01 - 23 t12:34z

即时:toString

instant类表示UTC时间,总是UTC时间。

Instant instant = Instant.now() ;

instant.toString (): 2018 - 01 - 23 t12:34:56.123456z

示例字符串2010-10-12T08:50Z的末尾的Z发音为“Zulu”,表示UTC。

您想要的格式恰好符合ISO 8601标准。java。时间类在解析/生成字符串时默认使用这些标准格式。因此不需要指定格式化模式。就像上面看到的那样调用Instant::toString。

如果你特别想要整分钟没有秒或小数秒,那么截断。通过ChronoUnit类指定一个时间单位。

Instant instant = Instant.now().truncatedTo( ChronoUnit.MINUTES ) ;
String output = instant.toString();  // Generate a `String` object in standard ISO 8601 format.

关于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等等。

其他回答

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”。

从Java 8开始,你可以简单地做:

Instant.now().toString();

来自java.time.Instant文档:

现在 公共静态即时现在() 从系统时钟中获取当前时刻。 这将查询系统UTC时钟以获得当前时刻。

 

toString toString() 使用ISO-8601表示法的该瞬间的字符串表示法。 使用的格式与DateTimeFormatter.ISO_INSTANT相同。

试试这个,

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ");
        String date=sdf.format (new Date() );

它的ISO 8601格式

如果您不想包含Jodatime(尽管它很好)

javax.xml.bind.DatatypeConverter.printDateTime(
    Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);

返回一个字符串:

2012-07-10T16:02:48.440Z

这与原始请求略有不同,但仍然是ISO-8601。

ISO 8601可能包含秒 看到http://en.wikipedia.org/wiki/ISO_8601 *

所以代码应该是

DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");