JXDatePicker à l'aide de SimpleDateFormat au format jj.MM.aa à jj.MM.aaaa avec le siècle en cours

comme déjà expliqué que je veux réaliser, que lorsque l'utilisateur est en train de modifier une date dans un JXDatePicker, il peut choisir, à la météo il tape à nouveau dans le même format, qui est par défaut le dd.MM.aaaa ou tout simplement dd.MM.aa. Quand il utilise la forme courte, je veux le Sélecteur pour choisir le siècle en cours.

Exemple:

27.01.2012 edited to 27.01.10 should result in 27.01.2010

ainsi que:

27.01.2012 edited to 27.01.2010 should also result in 27.01.2010

Par défaut, le JXDatePicker handels-il de la façon suivante:

27.01.2012 edited to 27.01.10 results in 27.01.0010

Qui n'est pas vraiment la façon dont je voulais qu'il fonctionne. Après quelques recherches, j'ai trouvé la Méthode suivante dans SimpleDateFormat

/**
 * Sets the 100-year period 2-digit years will be interpreted as being in
 * to begin on the date the user specifies.
 *
 * @param startDate During parsing, two digit years will be placed in the range
 * <code>startDate</code> to <code>startDate + 100 years</code>.
 */
public void set2DigitYearStart(Date startDate)

À première vue, cela sonnait exactement comme ce dont j'ai besoin. Donc je l'ai testé et malheureusement ça n'a pas fonctionné comme je l'espérais qu'il le ferait. C'est parce que je veux utiliser dd.MM.aaaa comme format d'affichage des dates, et que vous souhaitez qu'il s'affiche comme ça en edit mode. Par exemple lorsque l'utilisateur klicks sur une date comme 27.01.2012, je veux aussi qu'il soit comme ça en edit mode, trop et pas seulement à court formulaire: 27.01.12.

Mon Problème est maintenant, que set2DigitYearStart(Date) malheureusement ne fonctionne que lorsque je choisis d'utiliser le shortform en edit mode. J'ai fait un petit exemple pour montrer ce cas (SwingX Bibliothèque est nécessaire, en raison de jxdatepicker et peut être trouvé être ici).

public class DatePickerExample extends JPanel
{
  static JFrame frame;

  public DatePickerExample()
  {
    JXDatePicker picker = new JXDatePicker();
    JTextField field = new JTextField( 10 );

    add( field );
    add( picker );

    final Calendar instance = Calendar.getInstance();
    instance.set( 2012, 01, 26 );
    Date date = instance.getTime();
    picker.setDate( date );

    //   SimpleDateFormat format = new SimpleDateFormat( "dd.MM.yy" );//Works, but I wonna display and edit it with dd.MM.yyyy
    SimpleDateFormat format = new SimpleDateFormat( "dd.MM.yyyy" );
    final Date startDate = new Date( 0 );//01.01.1970
    format.set2DigitYearStart( startDate );

    picker.setFormats( format );
  }

  public static void main( String[] args )
  {
    frame = new JFrame();
    frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
    frame.setBounds( 400, 400, 400, 400 );
    frame.setLayout( new BorderLayout() );
    frame.add( new DatePickerExample() );
    frame.setVisible( true );
  }
}

Si quelqu'un a déjà eu la même exigence et peut me dire comment faire ce travail? Toutes les idées sont les bienvenue. Merci beaucoup à l'avance. ymene

"je veux que le Sélecteur pour choisir le siècle en cours."</j'> Ah, la préparation de l'Y2.1K bug au début, je la vois. 😉
Haha, m'! Même si en 2012, il n'y a rien de mal avec le fait de considérer la façon dont le logiciel permet de travailler à l'avenir! 😛

OriginalL'auteur crusam | 2012-01-27