Ваше последнее редактирование проясняет ситуацию.
По сути, вы запутались, и вы уже получили то, что хотели.
1239867980191 миллисекунд с начала эпохи до четверга, 16 апреля 2009 года, в 7:46: 20,191 в часовом поясе GMT. Тот же самый момент времени переводится в тот же день, но в 8: 46: 20.191 в часовом поясе GMT + 01. Если в вашей входной строке указано «7: 46: 20.191» и вы действительно получили 1239867980191 от Date.getTime()
, то поздравляем, код синтаксического анализа понял, что ваш «7: 46: 20.191» интерпретируется как часовой пояс GMT, и сделал это правильно .
Если после вы получаете «8:46:20» при печати, это только потому, что вы используете часовой пояс GMT + 01 для отображения этого момента. Обратите внимание, что строка содержит GMT+100
точно, чтобы уведомить вас, что она использует этот часовой пояс для отображения. instant , который представляет экземпляр Date
, тем не менее является именно тем моментом, который вы хотите, чтобы он содержал. Помните, что экземпляр Date
представляет момент времени, для которого не применяется понятие часового пояса: часовые пояса используются для преобразования моментов в элементы календаря (дни, часы ...) и обратно.
Чтобы преобразовать Date
в отображаемую строку, используйте DateTimeFormat.format(Date, TimeZone)
, которая позволяет указать часовой пояс, который вы хотите использовать для этой строки.