什么是获得ISO 8601格式的当前时刻,UTC 的最优雅方式?它应该看起来像:2010-10-12T08:50Z.
例:
String iso8601 = DateFormat.getDateTimeInstance(DateFormat.ISO_8601).format(date);
Joa*_*uer 276
使用SimpleDateFormat格式化任何Date你想要的对象:
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'"); // Quoted "Z" to indicate UTC, no timezone offset
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
使用new Date()如上所示的格式化当前时间.
use*_*421 220
对于默认时区不是UTC的系统:
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
的SimpleDateFormat,如果经常需要的情况下可以声明为一个全局常量,但要注意,这个类不是线程安全的.如果多个线程同时访问它必须同步.  
编辑:如果做很多不同的时间/日期操作,我更喜欢Joda Time ... 
EDIT2:更正:setTimeZone不接受字符串(由Paul更正)
She*_*epy 159
Java.time使Java 8变得简单.并且线程安全.
ZonedDateTime.now( ZoneOffset.UTC ).format( DateTimeFormatter.ISO_INSTANT )
结果: 2015-04-14T11:07:36.639Z
您可能会喜欢使用或
Temporal等较轻的打印机,但它们缺少格式化程序支持或时区数据.只开箱即用.InstantLocalDateTimeZonedDateTime
通过调整或链接ZonedDateTime和DateTimeFormatter的选项/操作,您可以在一定程度上轻松控制时区和精度:
ZonedDateTime.now( ZoneId.of( "Europe/Paris" ) )
             .truncatedTo( ChronoUnit.MINUTES )
             .format( DateTimeFormatter.ISO_DATE_TIME )
结果: 2015-04-14T11:07:00+01:00[Europe/Paris]
精简要求(例如删除秒部分)仍必须由自定义格式或自定义后期处理提供.
.format( DateTimeFormatter.ISO_LOCAL_DATE_TIME ) // 2015-04-14T11:07:00
.format( DateTimeFormatter.ISO_LOCAL_DATE ) // 2015-04-14
.format( DateTimeFormatter.ISO_LOCAL_TIME ) // 11:07:00
.format( DateTimeFormatter.ofPattern( "yyyy-MM-dd HH:mm" ) ) // 2015-04-14 11:07
对于Java 6和7,您可以考虑java.time的后端口,例如ThreeTen-Backport,它也有一个Android端口.两者都比Joda轻,并且从Joda的经验中学到了- 尤其是 考虑到java.time是由Joda的作者设计的.
aio*_*obe 124
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".
小智 75
从Java 8开始,您可以简单地执行:
Instant.now().toString();
来自java.time.Instant文档:
现在
public static Instant now()从系统时钟获取当前瞬间.
这将查询系统UTC时钟以获取当前时刻.
public String toString()使用ISO-8601表示的此瞬间的字符串表示.
Jig*_*shi 26
使用JodaTime
ISO 8601日历系统是Joda-Time中的默认实现
这是JodaTime Formatter的文档
编辑:
如果您不想添加或者如果您没有看到添加上面库的价值,您可以在构建SimpleDateFormat类中使用将Date格式化为所需的ISO格式
正如@Joachim Sauer所建议的那样
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mmZ");
String nowAsString = df.format(new Date());
yeg*_*256 20
Apache的DateFormatUtilscommons-lang3具有有用的常量,例如:DateFormatUtils.ISO_DATETIME_FORMAT
Mat*_*ett 18
如果你不想包括Jodatime(虽然它很好)
javax.xml.bind.DatatypeConverter.printDateTime(
    Calendar.getInstance(TimeZone.getTimeZone("UTC"))
);
返回一个字符串:
2012-07-10T16:02:48.440Z
这与原始请求略有不同,但仍然是ISO-8601.
okw*_*wap 16
ISO 8601可能包含秒,请参阅http://en.wikipedia.org/wiki/ISO_8601#Times
所以代码应该是
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Bas*_*que 10
更新:该乔达时间的项目现在处于维护模式,与团队的建议迁移java.time类.对于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 8及更高版本,Joda-Time继续工作.但是内置的java.time框架取代了Joda-Time.因此,请尽快将代码从Joda-Time迁移到java.time.
请参阅我的其他答案,了解现代解决方案
该java.time框架是建立在Java 8和更高版本.这些类取代麻烦的老传统日期时间类,如java.util.Date,Calendar,和SimpleDateFormat.
现在处于维护模式的Joda-Time项目建议迁移到java.time类.
要了解更多信息,请参阅Oracle教程.并搜索Stack Overflow以获取许多示例和解释.规范是JSR 310.
您可以直接与数据库交换java.time对象.使用符合JDBC 4.2或更高版本的JDBC驱动程序.不需要字符串,不需要课程.java.sql.*
从哪里获取java.time类?
该ThreeTen-额外项目与其他类扩展java.time.该项目是未来可能添加到java.time的试验场.您可以在此比如找到一些有用的类Interval,YearWeek,YearQuarter,和更多.
Bas*_*que 10
其他一些答案在推荐java.time类时是正确的,但会根据您的特定需求使用不必要的长度。
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-23T12:34Z
Instant::toString本jav.time.Instant类表示UTC片刻,总是在UTC。
Instant instant = Instant.now() ;
Instant.toString(): 2018-01-23T12:34:56.123456Z
在Z您的例子字符串的结尾2010-10-12T08:50Z的发音是“祖鲁”和指UTC。
您想要的格式恰好符合ISO 8601标准。所述java.time类解析/生成字符串时默认使用这些标准格式。所以不需要指定格式模式。只需调用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 8和更高版本。这些类取代了麻烦的旧的遗留日期时间类,例如java.util.Date, Calendar, & SimpleDateFormat。
现在处于维护模式的Joda-Time项目建议迁移到java.time类。
要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是JSR 310。
您可以直接与您的数据库交换java.time对象。使用符合JDBC 4.2或更高版本的JDBC 驱动程序。不需要字符串,不需要类。java.sql.*
从哪里获得 java.time 类?
该ThreeTen-额外项目与其他类扩展java.time。该项目是未来可能添加到 java.time 的试验场。你可能在这里找到一些有用的类,比如Interval,YearWeek,YearQuarter,和更多。
对于Java版本7
您可以关注Oracle文档:http: //docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
X - 用于ISO 8601时区
TimeZone tz = TimeZone.getTimeZone("UTC");
DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
df.setTimeZone(tz);
String nowAsISO = df.format(new Date());
System.out.println(nowAsISO);
DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
//nowAsISO = "2013-05-31T00:00:00Z";
Date finalResult = df1.parse(nowAsISO);
System.out.println(finalResult);
您可以将Java的SimpleDateFormat与yyyy-MM-dd'T'HH:mm:ssXXXISO 8601 的以下模式一起使用.
示例代码:(列出所有可用时区)
for (String timeZone : TimeZone.getAvailableIDs())
{
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
    dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone));
    String formatted = dateFormat.format(new Date());
    System.out.print(formatted);
    if (formatted.endsWith("Z"))
    {
        // These time zone's have offset of '0' from GMT.
        System.out.print("\t(" + timeZone + ")");
    }
    System.out.println();
}
你可以使用:
TimeZone.getDefault()
对于默认的vm时区.更多这里
您可能会注意到以少数时区结束的日期时间'Z'.这些时区'0'与GMT 相抵.
更多信息可以在这里找到.
我相信最简单的方法是首先进入即时,然后串起来:
String d = new Date().toInstant().toString();
这将导致:
2017-09-08T12:56:45.331Z
| 归档时间: | 
 | 
| 查看次数: | 319673 次 | 
| 最近记录: |