如果你正在尝试使用军用码(即Z表示GMT看到:http://www.timeanddate.com/library/abbreviations/timezones/military/z.html),你可以使这样的事情:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.Date;
public class CalendarExample {
static final String MILITARY_OFFSETS = "YXWVUTSRQPONZABCDEFGHIKLM";
static final int MILLIS_IN_HOUR = 1000*60*60;
public static void main(String[] args) {
System.out.println(formatDate(new Date(), "yyyy-MM-dd", "GMT")); // 2014-02-27Z
System.out.println(formatDate(new Date(), "HH:mm:ss", "GMT"));
System.out.println(formatDate(new Date(), "yyyy-MM-dd", "EST"));
System.out.println(formatDate(new Date(), "HH:mm:ss", "EST"));
}
static String formatDate(Date date, String dateTimeFormat, String timezoneCode) {
Calendar calendar = new GregorianCalendar();
TimeZone tz = TimeZone.getTimeZone(timezoneCode);
calendar.setTimeZone(tz);
int offset = calendar.get(Calendar.ZONE_OFFSET)/MILLIS_IN_HOUR;
// System.out.println(timezoneCode + " Offset is " + offset + " hours");
String timeZoneCode = MILITARY_OFFSETS.substring(offset + 12, offset + 13);
SimpleDateFormat dateFmt = new SimpleDateFormat(dateTimeFormat + "'" + timeZoneCode + "'");
return dateFmt.format(date);
}
}
输出:
2014-02-27Z
11:57:44Z
2014-02-27R
11:57:44R
这是使用jodatime?如果是的话,你应该在你的问题中说明。任何不使用std java api的理由? – rainkinz
@rainkinz:有很多原因使用Joda时间,而不是标准(前8)Java API。但是,是的,这个问题真的应该说明这是关于乔达时间。 –
出于好奇:为什么?你不能仅仅从一个日期就知道确切的时间,即使有时区信息,日期和时间也是一样的... – fge