Я работаю над исправлением существующего приложения Swing, использующего даты Java и JSpinner Swing как DateEditor. Я пытаюсь заставить редактор по умолчанию использовать UTC для отображения времени, а не нашего локального часового пояса. Приложение работает в Windows с использованием Java 8.JSpinner.DateEditor в Java Не соблюдает TimeZone при инициализации
Код, который я использую, приведен ниже.
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
public class Test {
public static void main(String [] args) {
// Initialize some sample dates
Date now = new Date(System.currentTimeMillis());
JSpinner spinner = new JSpinner();
// Create model with a current date and no start/end date boundaries, and set it to the spinner
spinner.setModel(new SpinnerDateModel(now, null, null, Calendar.MINUTE));
// Create new date editor with a date format string that also displays the timezone (z)
// Set the format's timezone to be UTC, and finally set the editor to the spinner
JSpinner.DateEditor startTimeEditor = new JSpinner.DateEditor(spinner, "yyyy-MMM-dd HH:mm zzz");
startTimeEditor.getFormat().setTimeZone(TimeZone.getTimeZone("UTC"));
spinner.setEditor(startTimeEditor);
JPanel panel = new JPanel();
panel.add(spinner);
JOptionPane.showConfirmDialog(null, panel);
}
}
Этот код, однако, имеет проблему с инициализацией. Когда сначала появляется диалоговое окно, время отображается в нашем локальном часовом поясе, а не в формате UTC. Как только пользователь сначала взаимодействует с полем, щелкнув по нему, он переключится на UTC и корректно работает оттуда.
Как я могу получить поле для отображения первоначально в UTC?
Спасибо, это одно возможное обходное решение, которое мы рассматриваем. Но это выглядело скорее как взлома, поэтому мы хотели посмотреть, есть ли более правильный способ сделать это, прежде чем мы остановимся на этом как на обходной путь. – JohnnyO
@JohnnyO Добавлен другой обходной путь. К сожалению, до сих пор это хак. Я не знаю, что любое стандартное использование JSpinner заставит его обновляться на основе изменений в редакторе. – VGR