java - 如何使用 LocalTime 对象设置 JSpinner 的值?
问题描述
我正在尝试使用 JSpinner 和 Java 8 的时间 API 制作时间选择器。我想做一个没有日期的时间选择器。
之前,我使用的是 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);
解决方案
是的,方法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);
}
如您所见,根据您使用的 JDK 版本,有两种方法可以转换java.util.Date
为.LocalTime
theTime
上面的代码将以格式打印HH:mm
推荐阅读
- c - 以状态 3 SDL 结束的程序
- angular - id 在 angular-in-memory-web-api 中应该是可选的
- javascript - 有没有办法检测实际的 DOM 渲染何时完成?
- export - DialogFlow 导出说明
- jenkins - Webpack 能否完成云原生应用程序的完整 DevOps 管道流程?
- c# - 在项目之外访问 DbContext
- r - 如何检查一列中的值是否为 NA 而另一列中的值是否为 NA?
- vba - 将 2 个不同表中的值排列成图表
- java - WorkManger 适用于 Oreo 但不适用于 Lollipop
- javascript - 如何将本地参数传递给函数外的事件处理程序?