以下是我的代码
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
我尝试了不同的格式化程序,但没有运气。
任何建议对我都有帮助
Atleast可以使用SimpleDateFormat获取此格式吗?
通过使用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版本中不确定
答案 0 :(得分:0)
这样的东西?注意我没有使用格里高利不确定你是否想要特定的格里高利日历,在这种情况下你将不得不改变一点。
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年7月29日+ 05:30
答案 1 :(得分:0)
最简单的方法是重建JDK7功能。您必须知道新的 XXX 计算基于日历类的已有字段。 他们采用 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());
我希望这段代码可以帮助您从那里开始。