2012-01-25 13 views
3

明らかに、私は何か基本的なものを見逃しています。私はjspinnerの値を書式設定する際に問題があります。私はいくつかの方法で試してみたが、エラーを受け取り続けている.Jspinnerから値を取得しようとしているのとは別に、それらを追跡していなかった。ここでSimpleDateFormatを使用した場合の問題

はスピナーコードです:ここで

//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); 

現在のエラー:スレッドで 例外 "メイン" 持つjava.text .ParseException:Unparseable date: "Oct 10月23日00:00:00 EDT 2006"

答えて

4

私はこの問題が疑わしいです:

dateFrom.getValue().toString() 

私はdateFrom.getValue()がちょうどDateを返すと思っています。もちろん関連するフォーマットはありません。代わりには、あなたはそれをキャストする必要があり、を解析する:

Date from = (Date) dateFrom.getValue(); 

私はもちろん、間違っている可能性が...それは私の最初の考えだろう。

+0

Mr.Jon Skeetが最初に正しく答えたのでアップアップされました。 –

+0

ありがとうございます。はい、これは正しいです。私はこれを試しましたが、少し異なりました。私は近づいていましたが、十分に近くはありません。返信をありがとう。 – whitewolfpgh

2

あなたは、あなたが使用した形式で日付を返さない()問題はdateFromが実際に選択した日付を返すことで、Date.toString

String dosFrom = sdfDestination.format((Date) dateFrom.getValue()); 

を使用する必要があります。

3

あなたのJSpinner#getValue()メソッドがDateを返しており、解析する必要がないと思われます。あなただけの

Date from = (Date) dateFrom.getValue(); 

常にあなたが取得している理由である現在のロケール(「月曜10月23日夜12時00分00秒...」)に同じデフォルトの形式で日付を返すDate.toString()の呼び出しに置き換えてみてくださいそれを解析しようとする際の例外です。

4

あなたは、あなたがSpinnerDateModelの

enter image description here

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(); 
      } 
     }); 
    } 
} 
の使用のために Date instance

JSpinnerからの簡単な例を解析し解決するために必要なことができなかった、チュートリアルをおよそ JSpinners読み取り、 JSpinner instaceため SpinnerDateModelを設定する必要があります
関連する問題