如果你正在嘗試使用軍用碼(即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