如何使用localtime对象设置jspinner的值?

8fq7wneg  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(466)

我正在尝试使用jspinner和java8的timeapi制作一个时间选择器。我想做一个没有日期的时间选择器。
以前,我使用的是simpledateformat,但当我打印出jspinner的值时,它会返回带有日期的时间。
那么,如何将localtime对象的值传递给jspinner的setvalue方法呢?
这是我目前的代码:

JSpinner timeSpinner = new JSpinner(new SpinnerDateModel());
JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "HH:mm");
timeSpinner.setEditor(timeEditor);
LocalTime newTime = LocalTime.of(11, 9);
timeSpinner.setValue(newTime);

timeSpinner.setBounds(126, 55, 56, 22);
contentPanel.add(timeSpinner);

还是我的做法不对?
这是我的原始代码,可以工作:

JSpinner timeSpinner = new JSpinner(new SpinnerDateModel());
JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(timeSpinner, "HH:mm");
timeSpinner.setEditor(timeEditor);
SimpleDateFormat time = new SimpleDateFormat("HH:mm");
try {
    timeSpinner.setValue(time.parseObject("10:00"));
} catch (ParseException timeError) {
    timeError.printStackTrace();
}
timeSpinner.setBounds(126, 55, 56, 22);
contentPanel.add(timeSpinner);
ijxebb2r

ijxebb2r1#

是的,方法 getValue() ,班级 SpinnerDateModel ,返回的示例 java.util.Date() 但你可以把它转换成 LocalTime 具体如下:

Object obj = timeSpinner.getValue();
if (obj instanceof java.util.Date) {
    java.util.Date theDate = (java.util.Date) obj;
    java.time.Instant inst = theDate.toInstant();
    java.time.ZoneId theZone = java.time.ZoneId.systemDefault();
    java.time.LocalTime thetime = java.time.LocalTime.ofInstant(inst, theZone); // Since JDK 9
    /*
    LocalTime.from(ZonedDateTime.ofInstant(inst, theZone)); // Since JDK 8
     */
    System.out.println(thetime);
}

如您所见,有两种方法可以转换 java.util.DateLocalTime ,具体取决于您使用的jdk版本。
将打印上述代码 theTime 格式 HH:mm

相关问题