显然,我遗漏了一些基本的东西。我在格式化jspinner的值时遇到问题。我尝试了几种不同的方法并继续收到错误,没有跟踪它们,除了它与我试图从jspinner中获取值的方式有关。
这是微调代码:
//setup date format for both spinners
SimpleDateFormat datePattern = new SimpleDateFormat("MM/dd/yyyy");
JSpinner dateFrom = new JSpinner(new SpinnerDateModel());
dateFrom.setEditor(new JSpinner.DateEditor(dateFrom, datePattern.toPattern()));
JPanel dateFromPanel = new JPanel(new GridLayout());
dateFromPanel.add(dateFrom);
dateFromPanel.setBorder(new TitledBorder("Date - From"));
以下是我目前正在尝试获取格式的方法:
SimpleDateFormat sdfSource = new SimpleDateFormat("MM/dd/yyyy");
Date from = sdfSource.parse(dateFrom.getValue().toString());
SimpleDateFormat sdfDestination = new SimpleDateFormat("MM/dd/yyyy");
String dosFrom = sdfDestination.format(from);
当前错误: 线程“main”中的异常java.text.ParseException:Unparseable date:“Mon Oct 23 00:00:00 EDT 2006”
答案 0 :(得分:4)
我怀疑问题是这样的:
dateFrom.getValue().toString()
我怀疑dateFrom.getValue()
只是返回Date
- 当然没有任何关联的格式。而不是解析,你应该只是投射它:
Date from = (Date) dateFrom.getValue();
我当然可能是错的......但那是我的第一次想法。
答案 1 :(得分:4)
您必须阅读有关JSpinners的教程并为JSpinner
instace设置SpinnerDateModel,然后您无需解决Date instance
中的解析JSpinner
使用SpinnerDateModel的简单示例
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
public class TimeZoneSpinners {
private final String[] zones = {"Asia/Tokyo", "Asia/Hong_Kong",
"Asia/Calcutta", "Europe/Paris", "Europe/London",
"America/New_York", "America/Los_Angeles"
};
private final JLabel[] labels = new JLabel[zones.length];
private final SimpleDateFormat[] formats = new SimpleDateFormat[zones.length];
private JSpinner spinner;
private SpinnerDateModel model;
private SimpleDateFormat format;
private JPanel panel;
private JFrame frame = new JFrame();
public void makeUI() {
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
model = new SpinnerDateModel();
model.setValue(date);
spinner = new JSpinner(model);
spinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
Date date = (Date) ((JSpinner) e.getSource()).getValue();
for (int i = 0; i < labels.length; i++) {
labels[i].setText(formats[i].format(date));
}
}
});
format = ((JSpinner.DateEditor) spinner.getEditor()).getFormat();
format.setTimeZone(TimeZone.getTimeZone(zones[0]));
format.applyPattern("yyyy-MM-dd HH:mm:ss");
panel = new JPanel(new GridLayout(zones.length, 2, 10, 10));
for (int i = 0; i < zones.length; i++) {
formats[i] = new SimpleDateFormat("yyyy-MMM-dd HH:mm:ss");
formats[i].setTimeZone(TimeZone.getTimeZone(zones[i]));
JLabel label = new JLabel(zones[i]);
labels[i] = new JLabel(formats[i].format(date));
panel.add(label);
panel.add(labels[i]);
}
frame.setLayout(new BorderLayout(10, 10));
frame.add(spinner, BorderLayout.NORTH);
frame.add(panel, BorderLayout.CENTER);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new TimeZoneSpinners().makeUI();
}
});
}
}
答案 2 :(得分:3)
我怀疑是因为您的JSpinner#getValue()
方法返回了Date
而您无需解析它。您可以尝试使用
Date from = (Date) dateFrom.getValue();
调用Date.toString()
始终返回当前区域设置的相同默认格式的日期(“Mon Oct 23 00:00:00 ...”),这就是您在尝试解析时遇到异常的原因它
答案 3 :(得分:2)
你应该使用
String dosFrom = sdfDestination.format((Date) dateFrom.getValue());
问题是dateFrom实际返回所选日期,而Date.toString()不会以您使用的格式返回日期。