Apparently, I\'m missing something fundamental. I\'m having a problem with formatting the value of a jspinner. I\'ve tried a couple different ways and keep receiving an error, d
I suspect the problem is this:
dateFrom.getValue().toString()
I suspect dateFrom.getValue()
is just returning a Date
- which of course doesn't have any associated format. Instead of parsing that, you should just cast it:
Date from = (Date) dateFrom.getValue();
I could be wrong, of course... but that would be my first thought.
I suspect it's because your JSpinner#getValue()
method is returning a Date
and you don't need to parse it. You might try replacing with just
Date from = (Date) dateFrom.getValue();
Calling Date.toString()
always returns a date in the same default format for the current locale ("Mon Oct 23 00:00:00 ...") which is why you're getting an exception on trying to parse it.
you have to read tutorial about JSpinners and to set SpinnerDateModel for JSpinner
instace, then you couldn't needed to solve parsing Date instance
from JSpinner
simple example for usage of 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();
}
});
}
}
You should use
String dosFrom = sdfDestination.format((Date) dateFrom.getValue());
The problem is that dateFrom actually returns the selected date, and Date.toString() doesn't return the date in the format you use.