我正在拍摄当前时间并希望将其转换为GMT +00:00 / UTC。
Date dt = Calendar.getInstance().getTime();
SimpleDateFormat out = new SimpleDateFormat("EEE, MMM d yyyy hh:mm:ss z");
out.setTimeZone(TimeZone.getTimeZone("UTC"));
String current = dt.toString();
String result = out.format(dt);
current = Tue Dec 24 17:35:59 GMT+04:00 2013
我得到的结果:
result = Tue, Dec 24 2013 01:35:59 UTC
不是吗?我应该Tue, Dec 24 2013 13:35:59 UTC
对吗?
答案 0 :(得分:2)
在SimpleDateFormat模式中使用大写“H”以您想要的格式获取当天的小时。像这样:
SimpleDateFormat out = new SimpleDateFormat("EEE, MMM d yyyy HH:mm:ss z");
小'h'代表PM / AM表格中的一小时(0-12)
答案 1 :(得分:1)
使用kk。
DateFormat.format("yyyy-MM-dd kk:mm:ss", d.getTime());
这可能会解决您的问题
答案 2 :(得分:1)
您应该使用的日期格式是
"EEE, MMM d yyyy HH:mm:ss z"而不是
"EEE, MMM d yyyy hh:mm:ss z"
小时位置的情况在12小时和24小时格式之间改变。
答案 3 :(得分:0)
Joda-Time让这项工作更轻松。
DateTime now = new DateTime( DateTimeZone.UTC );
System.out.println( now );
答案 4 :(得分:0)
假设只关注外部表示。以下为我工作,事不宜迟。它基于java.util.Calendar对象和java.util.Formatter。
似乎日历对象的行为类似于具有不同时区而不是默认时区的日期对象,并且被格式化程序接受以代替日期。
测试代码为:
Calendar cl = Calendar.getInstance();
cl.setTimeInMillis(System.currentTimeMillis());
System.out.println("cl="+String.format(
"%1$ta, %1$td %1$tb %1$tY %1$tT %1$tZ", cl));
cl.setTimeZone(TimeZone.getTimeZone("GMT"));
System.out.println("cl="+String.format(Locale.ENGLISH,
"%1$ta, %1$td %1$tb %1$tY %1$tT %1$tZ", cl));
结果是:
cl=Mi, 06 Feb 2019 13:51:41 MEZ
cl=Wed, 06 Feb 2019 12:51:41 GMT