# Timestamp zu Datum und umgekehrt



## Guest (16. Okt 2007)

Hi,

ich würde gerne zu Übungszwecken ein Programm schreiben, welches Timestamps zu Daten und andersrum berechnet.

Der User hat einen Frame mit 6 Textfeldern (Timestamp, Tag, Monat, Jahr, Stunde, Minute). Wenn er irgentwo was eingibt soll der Rest berechnet werden.

Das ganze habe ich schon für den Timestamp hinbekommen. Das Programm spuckt also nun alles andere aus wenn man den Timestamp eingibt (bzw wenn man nichts eingibt den aktuellen Stamp).

Bei dem Rest haperts noch. Ich habe mir die API's und Bücher durchgelesen, finde jedoch nichts wo ich von String zu Date umwandeln kann. Wie mache ich das?


```
package timestamp;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Main extends JFrame implements ActionListener {

    private Date date = new Date();
    private SimpleDateFormat format;
    
    private JTextField timestampField, dayField, monthField, yearField, hourField, minuteField;

    /**
     * Method thats updates all components to date.
     */
    private void updateComponents() {
        
        timestampField.setText("" + ( date.getTime() / 1000l ));
        
        format = new SimpleDateFormat("dd");
        dayField.setText(format.format(date));
        
        format = new SimpleDateFormat("MM");
        monthField.setText(format.format(date));
        
        format = new SimpleDateFormat("yyyy");
        yearField.setText(format.format(date));
        
        format = new SimpleDateFormat("kk");
        hourField.setText(format.format(date));
        
        format = new SimpleDateFormat("mm");
        minuteField.setText(format.format(date));
        
    }
    
    /**
     * ActionListener for timestampField
     */
    public void actionPerformed(ActionEvent e) {
    
        if( e.getSource() == timestampField ) {

            timestampField.setText(timestampField.getText().trim());
        
            if( timestampField.getText().equals("") ) timestampField.setText("" + (date.getTime() / 1000l) );
        
            try {
                date.setTime( Long.parseLong(timestampField.getText()) * 1000l );
                updateComponents();             
            }
            catch(Exception ex) {
                JOptionPane.showMessageDialog(
                        this,
                        "enterValidValueFor",
                        "error",
                        JOptionPane.ERROR_MESSAGE);
            }
            
        }
        
    }     
    
    /**
     * Frame.
     */
    public Main() {
        super("Fenstertitel");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        JPanel pane = new JPanel();  
        timestampField.addActionListener(this); 
        dayField.addActionListener(this); 
        monthField.addActionListener(this); 
        yearField.addActionListener(this); 
        hourField.addActionListener(this); 
        minuteField.addActionListener(this); 
        pane.add(timestampField);
        pane.add(dayField);
        pane.add(monthField);
        pane.add(yearField);
        pane.add(hourField);
        pane.add(minuteField);
        add(pane);
    }

    public static void main(String[] args) {
        Main ausgabe = new Main();
        ausgabe.setVisible(true);
    }
    
}
```


----------



## Guest (16. Okt 2007)

Sorry, ich hatte noch das pack() und vordefinieren vergessen:


```
package timestamp;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Main extends JFrame implements ActionListener {

    private Date date = new Date();
    private SimpleDateFormat format;
    
    private JTextField timestampField = new JTextField(5),
                       dayField       = new JTextField(5),
                       monthField     = new JTextField(5),
                       yearField      = new JTextField(5),
                       hourField      = new JTextField(5),
                       minuteField    = new JTextField(5);

    /**
     * Method thats updates all components to date.
     */
    private void updateComponents() {
        
        timestampField.setText("" + ( date.getTime() / 1000l ));
        
        format = new SimpleDateFormat("dd");
        dayField.setText(format.format(date));
        
        format = new SimpleDateFormat("MM");
        monthField.setText(format.format(date));
        
        format = new SimpleDateFormat("yyyy");
        yearField.setText(format.format(date));
        
        format = new SimpleDateFormat("kk");
        hourField.setText(format.format(date));
        
        format = new SimpleDateFormat("mm");
        minuteField.setText(format.format(date));
        
    }
    
    /**
     * ActionListener for timestampField
     */
    public void actionPerformed(ActionEvent e) {
    
        if( e.getSource() == timestampField ) {

            timestampField.setText(timestampField.getText().trim());
        
            if( timestampField.getText().equals("") ) timestampField.setText("" + (date.getTime() / 1000l) );
        
            try {
                date.setTime( Long.parseLong(timestampField.getText()) * 1000l );
                updateComponents();             
            }
            catch(Exception ex) {
                JOptionPane.showMessageDialog(
                        this,
                        "enterValidValueFor",
                        "error",
                        JOptionPane.ERROR_MESSAGE);
            }
            
        }
        
    }     
    
    /**
     * Frame.
     */
    public Main() {
        super("Fenstertitel");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        JPanel pane = new JPanel();  
        timestampField.addActionListener(this); 
        dayField.addActionListener(this); 
        monthField.addActionListener(this); 
        yearField.addActionListener(this); 
        hourField.addActionListener(this); 
        minuteField.addActionListener(this); 
        pane.add(timestampField);
        pane.add(dayField);
        pane.add(monthField);
        pane.add(yearField);
        pane.add(hourField);
        pane.add(minuteField);
        add(pane);
        pack();
    }

    public static void main(String[] args) {
        Main ausgabe = new Main();
        ausgabe.setVisible(true);
    }
    
}
```


----------



## SlaterB (16. Okt 2007)

recht ähnlich
Date date = format .parse(string);

wenn alle Felder befüllt sind, dann ist es gut machbar,
füge die Teilstrings zusammen und benutze ein passendes Format

wenn du nur 10 Minuten hast, was dann?


----------



## Guest (16. Okt 2007)

Naja wenn der User nur ein Kästchen eingibt dann wird der Rest durch das aktuelle Datum ersetzt, aber du hast recht, was wenn der User einen Zeitpunkt vor der Unix-Zeit angibt?  ???:L 



> Date date = format .parse(string);
> 
> wenn alle Felder befüllt sind, dann ist es gut machbar,
> füge die Teilstrings zusammen und benutze ein passendes Format



also mache ich einfach tagFeld.getText() + "." + monatFeld.getText()... ? Muss ich vorher noch mit nullen auffüllen? Also wenn ich beim format dd hab aber der User beim Tag nur 2 angegeben hat.

Danke für deine Hilfe


----------



## SlaterB (16. Okt 2007)

das wirst du herausfinden, nachdem du das Wort 'Ausprobieren' nachgeschlagen hast 
'API/ Lehrbuch lesen' gibts auch noch, aber bei so einem schweren Thema auch nur schwer zu finden

leichter ist in dem 'aktuelles Datum'-Fall vielleicht, die nichtleeren Felder in Zahlen zu parsen und Calendar zu verwenden

aktueller Calendar,
calendar.set(YEAR, year);
usw.
(siehe API/ Lehrbuch/ google/ Forumsuche für tatsächliche Bedienung)


----------



## Guest (16. Okt 2007)

Okay danke, ich habs. Wen die Lösung interressiert hier die Source der Methoden (timestamp = SimTimeT):


```
private Date date = new Date();
    private SimpleDateFormat format;
        
    /**
     * Method thats updates all components to date.
     */
    private void updateComponents() {
        
        simTimeTField.setText("" + ( date.getTime() / 1000l ));
        
        format = new SimpleDateFormat("dd");
        dayField.setText(format.format(date));
        
        format = new SimpleDateFormat("MM");
        monthField.setText(format.format(date));
        
        format = new SimpleDateFormat("yyyy");
        yearField.setText(format.format(date));
        
        format = new SimpleDateFormat("kk");
        hourField.setText(format.format(date));
        
        format = new SimpleDateFormat("mm");
        minuteField.setText(format.format(date));
        
    }

    private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {                                            

        date = new Date();
        updateComponents();         
        
    }                                           

    private void FieldActionPerformed(java.awt.event.ActionEvent evt) {                                      

        dayField.setText   (dayField.getText().trim()   );
        monthField.setText (monthField.getText().trim() );
        yearField.setText  (yearField.getText().trim()  );
        hourField.setText  (hourField.getText().trim()  );
        minuteField.setText(minuteField.getText().trim());
        
        if( dayField.getText().equals("") ) {
            format = new SimpleDateFormat("dd");
            dayField.setText("" + format.format(date) );
        }
        
        if( monthField.getText().equals("") ) {
            format = new SimpleDateFormat("MM");
            monthField.setText("" + format.format(date) );
        }
        
        if( yearField.getText().equals("") ) {
            format = new SimpleDateFormat("yyyy");
            yearField.setText("" + format.format(date) );
        }
        
        if( hourField.getText().equals("") ) {
            format = new SimpleDateFormat("kk");
            hourField.setText("" + format.format(date) );
        }
        
        if( minuteField.getText().equals("") ) {
            format = new SimpleDateFormat("mm");
            minuteField.setText("" + format.format(date) );
        }
        
        try {
            
            int iday, imonth, iyear, ihour, iminute;
            
            iday    = Integer.parseInt(dayField.getText()   );
            imonth  = Integer.parseInt(monthField.getText() );
            iyear   = Integer.parseInt(yearField.getText()  );
            ihour   = Integer.parseInt(hourField.getText()  );
            iminute = Integer.parseInt(minuteField.getText());
            
            format = new SimpleDateFormat("dd.MM.yyy kk:mm");
            date = format.parse(iday + "." + imonth + "." + iyear + " " + ihour + ":" + iminute);
            
            updateComponents();             
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(
                    this,
                    Main.langGet("enterValidValueFor") + " " + Main.langGet("date"),
                    Main.langGet("error"),
                    JOptionPane.ERROR_MESSAGE);
        }
        
    }                                     

    private void simTimeTFieldActionPerformed(java.awt.event.ActionEvent evt) {                                              

        simTimeTField.setText(simTimeTField.getText().trim());
        
        if( simTimeTField.getText().equals("") ) simTimeTField.setText("" + (date.getTime() / 1000l) );
        
        try {
            date.setTime( Long.parseLong(simTimeTField.getText()) * 1000l );
            updateComponents();             
        }
        catch(Exception e) {
            JOptionPane.showMessageDialog(
                    this,
                    Main.langGet("enterValidValueFor") + " SimTimeT",
                    Main.langGet("error"),
                    JOptionPane.ERROR_MESSAGE);
        }
        
    }
```


----------



## SlaterB (16. Okt 2007)

wieso parst du den Inhalt der Textfelder in Zahlen,
z.B.
iday    = Integer.parseInt(dayField.getText()   ); 

und fügst die Zahlen dann wieder zu einem String zusammen?
verwende doch direkt die Strings aus den Textfeldern!


---------


allgemeiner Tipp:
auf alle Ewigkeit ständig neue SimpleDateFormat-Objekte zu erzeugen
könnte man als unnötig ansehen,
definiere dir 6 statische Variablen, dann hast du sie


----------



## Guest (16. Okt 2007)

Hey,

danke für den zweiten Tipp.. Wird gemacht  

Zum ersten Hinweis:

damit ich verhindern kann das der User zb Buchstaben eingibt


----------

