Date
объекты ничего не знают о часовых поясах - информация о часовом поясе отсутствует в объекте Date
. Объект Date
представляет собой «абсолютный» момент времени (это временная метка). Это означает, что вы не должны думать о объекте Date
как о «дате в определенном часовом поясе» - он не имеет часовой пояс.
Предположим, что из какого-то источника вы получаете String
, который содержит дату и время, без явного упоминания в нем часового пояса, например: 2014-12-16 17:30:48.382
. Предположим, что вы знаете, что эта дата и время находятся в часовом поясе GMT.
Вы могли бы затем разобрать его на Date
объекта с соответствующим SimpleDateFormat
объекта:
DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
// Set the timezone of the SimpleDateFormat to GMT, because you know the string
// should be interpreted as GMT
fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
// Parse the String into a Date object
Date dateTime = fmt.parse("2014-12-16 17:30:48.382");
// Date object which is set to "now"
Date now = new Date();
// Compare it to "now"
if (dateTime.before(now)) {
System.out.println("The specified date is in the past");
} else if (dateTime.after(now)) {
System.out.println("The specified date is in the future");
} else {
System.out.println("The specified date is now");
}
Если вы хотите напечатать дату в определенном часовом поясе, а затем сделать это путем форматирования с SimpleDateFormat
набора к соответствующий часовой пояс.
DateFormat outfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS z");
outfmt.setTimeZone(TimeZone.getTimeZone("EDT"));
// Will print dateTime in the EDT timezone
System.out.println(outfmt.format(dateTime));
Потому что это не тот же часовой пояс. Один - GMT, другой - нет. Попробуйте 'sd.format (new Date())' –
, как я могу сделать их одним и тем же часовым поясом, не изменяя новую Date(). GetTime()? – Roxana
Изменить системный часовой пояс на GMT? –