java JodaTime删除秒数

java JodaTime删除秒数,java,datetime,jodatime,iso8601,Java,Datetime,Jodatime,Iso8601,我正在使用JodaTime创建ISO 8601字符串 DateTime jodatime = new DateTime(2016, 04, 05, 23, 59, 59, 999, DateTimeZone.UTC); String converted = jodatime.toDateTimeISO().toString(); 现在,我得到以下信息: 2016-04-06T06:59:59.999Z 但是,我希望截断/删除秒和毫秒 2016-04-05T23:59Z 有人知道如何用最简单

我正在使用JodaTime创建ISO 8601字符串

DateTime jodatime = new DateTime(2016, 04, 05, 23, 59, 59, 999, DateTimeZone.UTC);
String converted = jodatime.toDateTimeISO().toString();
现在,我得到以下信息:

2016-04-06T06:59:59.999Z
但是,我希望截断/删除秒和毫秒

2016-04-05T23:59Z
有人知道如何用最简单的方式做到这一点吗?
还有谁能告诉我,日期解析库是否能识别ISO8601的缩短版本

格式化Joda时间值的常规方法是使用格式化程序。在这种情况下,除了Z:

DateTimeFormatter formatter = ISODateTimeFormat.dateHourMinute();
String text = formatter.print(value);
Z
有点棘手-我不相信你能用一个简单的模式(
DateTimeFormat.forPattern
)精确地指定你想要什么,但是你可以使用
DateTimeFormatterBuilder

DateTimeFormatter formatter = new DateTimeFormatterBuilder()
    .appendYear(4, 9)
    .appendLiteral('-')
    .appendMonthOfYear(2)
    .appendLiteral('-')
    .appendDayOfMonth(2)
    .appendLiteral('T')
    .appendHourOfDay(2)
    .appendLiteral(':')
    .appendMinuteOfHour(2)
    .appendTimeZoneOffset("Z", true, 2, 4)
    .toFormatter()
    .withLocale(Locale.US);

我相信这正是你想要的。

你为什么要依赖
toString()
?创建一个格式化程序。我使用了'ISODateTimeFormatter.dateHourMinue().withZone(DateTimeZone.UTC)`但它没有显示'Z'或'+00:00'“很抱歉,我没有发现Z。如果它始终是UTC,您可以使用字符串连接在末尾的
Z
。否则,构建一个新的
DateTimeFormatter
-将进行编辑以显示该内容。@Ryan:对不起,笔记本电脑刚刚死机。。。您的价值观是否始终为UTC?可以接受+00:00而不是Z吗?将在笔记本电脑备份时更新答案…Z优先于+00:00。。但后者也是可以接受的。我正在寻找类似于
datetimenomilis()
的东西,但也需要排除第二个。非常感谢。最初,我需要内置方法,例如
datetimenomilis()
,这样我就不需要自己构建格式。但是我找不到。我想每个人都对精确到秒感到满意。建筑商工作得很好,再次感谢你们。