я следующий кусок кода, который должен показывать время в объекте JSpinnerJSpinner показывающие время имеет постоянные часы офсетных несмотря на правильное значение
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.AM_PM, 0);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
spStartTime = new JSpinner(new CustomSpinnerModel(cal.getTime(), null, null, cal.get(Calendar.HOUR_OF_DAY), 100, "start"));
((JSpinner.DefaultEditor) spStartTime.getEditor()).getTextField().setFormatterFactory(new DefaultFormatterFactory(new DateFormatter(new SimpleDateFormat("hh:mm:ss,SSS"))));
CustomSpinnerModel расширяет SpinnerDateModel и я переопределение getNextValue() и getPreviousValue() ,
public Object getNextValue()
{
Object next = super.getValue();
Calendar calendar = new GregorianCalendar();
calendar.setTimeZone(TimeZone.getTimeZone("GMT"));
calendar.setTime((Date) next);
Date helper = new Date(calendar.getTimeInMillis() + defaultStep);
calendar.setTime(helper);
System.out.println(calendar.getTimeInMillis());
return calendar.getTime();
}
Теперь это печатает 100 миллисекунд первый раз, когда я ударил стрелка вверх, то есть значение правильно, как я начинаю с 0 миллисекунд. Проблема в том, что то, что я вижу в JSpinner, -
02:00:00,100
В визуализации имеется постоянное смещение в 2 часа.
Это сделал трюк. Спасибо. –