2013-07-20 4 views
0

Я вношу изменения в код, который работает на unix-боксе. Он устанавливает время для поля в базе данных на основе текущей даты и времени для Лондона.Java Дата и время

Методы, которыми я пользуюсь, следующие:

private static Date getCurrentTime() { 
    SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd-kk:mm:ss.SSS"); 
    format.setTimeZone(TimeZone.getTimeZone("Europe/London")); 

    Calendar cal = Calendar.getInstance(); 
    Date currentDate = cal.getTime(); 

    try { 
     return format.parse(format.format(currentDate)); 
    } catch (ParseException e) { 
     log.error("Error occured while parsing date-->" + e.getMessage()); 
    } 
    return new Date(); 
} 

private String getStringFromDate(Date date){ 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd-kk:mm:ss.SSS"); 
    return sdf.format(date); 
} 

Когда сообщение обрабатывается приложением Java на поточной UNIX поле (который установлен в северной америке время как тот, где он размещен), а затем, когда она вставлена ​​в базу данных это час меньше, чем (не устанавливается в BST).

Если я запустил тот же код в Eclipse на своем рабочем столе, я получаю нужное время в базе данных.

Я не уверен, что может вызвать эту проблему, и надеялся, что кто-то сможет помочь.

Благодаря

редактировать *** на второй взгляд, даже файлы журналов на поле Юниксовые час позади, так на этой основе я взять на себя UNIX, вызвавшего проблему отличие от моего кода.

ответ

1

A Date экземпляр всегда в UTC (или, должно быть, если вы не сделали что-то не так). вы должны хранить свои даты в db в UTC и конвертировать их в любой часовой пояс, который вы хотите, когда представляете их пользователю. все остальное просто просит неприятностей.

Ваш код, который форматирует, а затем анализирует экземпляр Date в том же TimeZone, просто бессмысленен.

+0

«Вы должны хранить свои даты в db в UTC» <- вряд ли так, если вы это сделаете, вы потеряете информацию о часовом поясе; более того, до 1970 года, 1 января, полночь GMT вы обречены – fge

+0

@fge - если вам нужен часовой пояс _original_, тогда да, вы также должны сохранить это. как это противоречит тому, что я сказал. сохранение дат в UTC не влияет на то, нужно ли хранить часовой пояс. то, что вы говорите, применяется только в том случае, если вы сохраняете свои даты в db в тексте. Я принимал столбец даты/времени. – jtahlborn

+0

ОК, справедливо. Я неправильно истолковал ваш ответ, извините – fge