英文:
How to set the value of a JSpinner using a LocalTime object?
问题
以下是翻译好的内容:
我正在尝试使用 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);
英文:
I am trying to make a time picker using JSpinner and Java 8's time API. I want to make a time picker without date.
Before, I was using SimpleDateFormat, but that would return time with date when I print out the value of the JSpinner.
So how can I pass the value of a LocalTime object into the setValue method of a JSpinner?
Here is my current code:
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);
Or am I taking the wrong approach to this?
This is my original code which works:
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);
答案1
得分: 0
是的,SpinnerDateModel
类的方法getValue()
会返回一个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); // JDK 9及以后版本
/*
java.time.LocalTime theTime = java.time.LocalTime.from(java.time.ZonedDateTime.ofInstant(inst, theZone)); // JDK 8及以后版本
*/
System.out.println(theTime);
}
正如你所见,有两种不同的方式可以将java.util.Date
转换为LocalTime
,取决于你使用的JDK版本。
上述代码将以HH:mm
的格式打印出theTime
。
英文:
Yes, method getValue()
, of class SpinnerDateModel
, returns an instance of java.util.Date()
but you can convert that into a LocalTime
as follows:
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);
}
As you can see, there are two ways to convert java.util.Date
to LocalTime
, depending on which JDK version you are using.
The above code will print theTime
in format HH:mm
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论