带时区格式的Java Datetime
我目前正在使用带时区格式的Java Datetime,java,datetime,timezone,Java,Datetime,Timezone,我目前正在使用SimpleDateFormat以yyyy-MM-dd HH:MM:ss格式创建日期时间值。这是我的密码: Date date = new SimpleDateFormat("yy-M-d H:m:ss").parse(datetime); String Dtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date); 但是,我希望格式为: 2013-04-12T13:38:48+02:00
SimpleDateFormat
以yyyy-MM-dd HH:MM:ss
格式创建日期时间值。这是我的密码:
Date date = new SimpleDateFormat("yy-M-d H:m:ss").parse(datetime);
String Dtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
但是,我希望格式为:
2013-04-12T13:38:48+02:00
如何添加时区以获得所需的格式
谢谢大家! 看看SimpleDateFormat。您可以看到,您可以使用字符“z”作为时区信息
例如:“yyyy.MM.dd G'at'HH:MM:ss z”将为您提供“2001.07.04 AD at 12:08:56 PDT”
要在日期上设置时区,请查看。这是XML/XSD dateTime数据类型格式。使用javax.xml.datatype.XMLGregorianCalendar
XMLGregorianCalendar gc = DatatypeFactory.newInstance().newXMLGregorianCalendar("2013-04-12T13:38:48+02:00");
System.out.println(gc);
输出
2013-04-12T13:38:48+02:00
通过包
java.util.Calendar
请尝试以下代码
import java.util.Calendar; //Import package
String month_order[]={"Select...","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
Calendar cal = Calendar.getInstance();
int month = cal.get(Calendar.MONTH) + 1;
int dom = cal.get(Calendar.DAY_OF_MONTH);
int doy=cal.get(Calendar.YEAR);
System.out.println("Current date: "+month_order[month]);
System.out.println("Current Month: "+dom);
System.out.println("Current year: "+doy);
我一直在寻找完全相同的答案。我必须向后兼容现有的日期格式,就像示例中的“2013-04-12T13:38:48+02:00”一样,我的另一个限制是,除了Java 6提供的以外,我不能使用任何开源库。因此,在这里找不到解决方案后,我提出了这个简单的转换技术,这很难看,但我发现我在这里发布了它,以防有人需要一个快速而肮脏的解决方案。如果有人知道如何做得更好(有我提到的限制),请纠正我 因此,要以所需格式生成输出:
private DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
public GregorianCalendar stringToCalendar(String v)
{
// 22 is an idx of last ':', you can replace with v.lastIndex(':') to be neat
String simpleV = v.substring(0, 22).concat(v.substring(23));
GregorianCalendar gc = (GregorianCalendar) df.getCalendar();
gc.setTime(df.parse(simpleV));
return gc;
}
public String calendarToString(GregorianCalendar v)
{
df.setCalendar(v);
String out = df.format(v.getTime());
return out.substring(0, 22).concat(":").concat(out.substring(22)); // read above on '22'
}
就像我说的,这还远远不够完美,但我没有找到更好的 如果你使用“z”或“z”,你仍然不能确定你的时区会是什么样子。这取决于您的本地机和JVM版本,将选择哪个ISO8601版本 使时区始终处于“+02:00”格式的方法之一是请求它。使用以下日期格式:
DateTimeFormatter formatter =
new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendOffset("+HH:MM","+00:00")
.toFormatter();
并始终与
ZoneDateTime
类型一起使用。它是线程安全的。有一种简单的方法。您可以按如下方式定义格式:
String Dtime=new SimpleDateFormat(“yyyy-MM-dd'T'HH:MM:ssXXX”)。格式(日期)代码>
这样就可以了。您可以点击堆栈溢出链接:谢谢!但最后z加上+0200。有没有办法得到“+02:00”?我需要时区中的“:”..@diego10-FYI-带或不带:
,以及带或不带T
都是ISO8601格式的可接受形式。因此,假设您希望此格式与某个内容进行交换,您应该可以。不过,你可能想看看你是否想要更好的日期处理。这是一个。顺便说一句,您可以使用toGregorianCalendar.getTime来获取java.util.Date。我知道这是一个由来已久的问题报告,但如果有人想知道如何在格式本身中实现这一点,只需使用ZZ而不是Z。使用Z的格式为+XXXX,而ZZ的格式为+XX:XX