格式 XMLGregorianCalendar
Format XMLGregorianCalendar
下面是我的代码
GregorianCalendar gregory=new GregorianCalendar();
gregory.setTime(new Date());
XMLGregorianCalendar xmlGregorianCalendar=DatatypeFactory.newInstance().newXMLGregorianCalendar(gregory);
System.out.println(xmlGregorianCalendar.toString());
当我在上面代码的最后一行打印 SOP 时,得到的输出类似于
2016-07-28T15:25:47.064+05:30
但我正在尝试将输出设为
2016-07-28+05:30
我尝试了不同的格式化程序,但没有成功。
任何建议都会对我有很大帮助
至少我们可以使用 SimpleDateFormat 获得这种格式吗?
通过使用简单日期格式,我能够得到“2016-07-29+0530”。如果我们可以在“05”和“30”之间加上“:”,请告诉我。我的代码如下
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddZ");
在 Java 版本 7 和 8 中,可以使用下面的方法获得
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddXXX");
但不确定 java 6 版本
是这样的吗?请注意,我没有使用 Gregorian,不确定您是否想要特定的 Gregorian Calender,在这种情况下,您将不得不稍作更改。
ZoneOffset myOffset = ZonedDateTime.now().getOffset();
System.out.println("ZoneOffset is " + myOffset.getId());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String currentDate = dateFormat.format(new Date());
System.out.println(currentDate + myOffset.getId());
这会打印:
ZoneOffset 为 +05:30
2016-07-29+05:30
最简单的方法是重建 JDK7 功能。您必须知道新的 XXX 计算是基于 Calendar class。
他们取 Calendar.ZONE_OFFSET 和 Calendar.DST_OFFSET 然后像这样从那里开始:
int totalOffset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
StringBuilder sb = new StringBuilder();
//handle zero offset
if (totalOffset == 0) {
sb.append('Z');
}
//convert to minutes because timezones are minute based
totalOffset = totalOffset / 60000;
char prefix = '-';
if (totalOffset >= 0) {
prefix = '+';
}
sb.append(prefix);
//if negative offset, invert now
totalOffset = Math.abs(totalOffset);
sb.append(String.format("%02d", (totalOffset / 60)));
sb.append(':');
sb.append(String.format("%02d", (totalOffset % 60)));
System.out.println(sb.toString());
我希望这段代码能帮助你从那里开始。
下面是我的代码
GregorianCalendar gregory=new GregorianCalendar();
gregory.setTime(new Date());
XMLGregorianCalendar xmlGregorianCalendar=DatatypeFactory.newInstance().newXMLGregorianCalendar(gregory);
System.out.println(xmlGregorianCalendar.toString());
当我在上面代码的最后一行打印 SOP 时,得到的输出类似于
2016-07-28T15:25:47.064+05:30
但我正在尝试将输出设为
2016-07-28+05:30
我尝试了不同的格式化程序,但没有成功。
任何建议都会对我有很大帮助
至少我们可以使用 SimpleDateFormat 获得这种格式吗?
通过使用简单日期格式,我能够得到“2016-07-29+0530”。如果我们可以在“05”和“30”之间加上“:”,请告诉我。我的代码如下
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddZ");
在 Java 版本 7 和 8 中,可以使用下面的方法获得
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-ddXXX");
但不确定 java 6 版本
是这样的吗?请注意,我没有使用 Gregorian,不确定您是否想要特定的 Gregorian Calender,在这种情况下,您将不得不稍作更改。
ZoneOffset myOffset = ZonedDateTime.now().getOffset();
System.out.println("ZoneOffset is " + myOffset.getId());
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String currentDate = dateFormat.format(new Date());
System.out.println(currentDate + myOffset.getId());
这会打印:
ZoneOffset 为 +05:30
2016-07-29+05:30
最简单的方法是重建 JDK7 功能。您必须知道新的 XXX 计算是基于 Calendar class。 他们取 Calendar.ZONE_OFFSET 和 Calendar.DST_OFFSET 然后像这样从那里开始:
int totalOffset = calendar.get(Calendar.ZONE_OFFSET) + calendar.get(Calendar.DST_OFFSET);
StringBuilder sb = new StringBuilder();
//handle zero offset
if (totalOffset == 0) {
sb.append('Z');
}
//convert to minutes because timezones are minute based
totalOffset = totalOffset / 60000;
char prefix = '-';
if (totalOffset >= 0) {
prefix = '+';
}
sb.append(prefix);
//if negative offset, invert now
totalOffset = Math.abs(totalOffset);
sb.append(String.format("%02d", (totalOffset / 60)));
sb.append(':');
sb.append(String.format("%02d", (totalOffset % 60)));
System.out.println(sb.toString());
我希望这段代码能帮助你从那里开始。