我目前正在使用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
如何添加时区以获得所需的格式?
谢谢!
答案 0 :(得分:10)
查看SimpleDateFormat的the API documentation。在那里你可以看到,你可以使用字符'z'作为时区信息。
示例:“HH:mm:ss z”中的“yyyy.MM.dd G”将在“PDT 12:08:56”为您提供“2001.07.04 AD”
要在日期设置时区,请查看this question and the answers。
答案 1 :(得分:4)
这是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
答案 2 :(得分:1)
我一直在寻找完全相同的答案。我必须向后兼容现有的日期格式,就像示例中一样 - " 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'
}
就像我说的那样,这远非完美,但我找不到更好的东西......
答案 3 :(得分:1)
如果你使用' z'或者' Z'然后你还不能确定你的时区会是什么样子。这取决于您的本地和JVM版本将选择哪个ISO8601版本。
让时区始终采用格式化的方法之一" +02:00"是请求它。使用以下日期格式:
DateTimeFormatter formatter =
new DateTimeFormatterBuilder()
.appendPattern("yyyy-MM-dd'T'HH:mm:ss")
.appendOffset("+HH:MM","+00:00")
.toFormatter();
并始终使用ZonedDateTime
类型。它是线程安全的。
答案 4 :(得分:0)
有一种简单的方法。您可以像这样定义格式:
String Dtime = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX").format(date);
这应该做到。
答案 5 :(得分:-1)
您可以通过包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);