Anzeige:
Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 15 von 36

Thema: [JAVA] Systemdatum einlesen und damit arbeiten

  1. #1
    Registrierter Benutzer
    Registriert seit
    06.10.2002
    Beiträge
    23

    Question [JAVA] Systemdatum einlesen und damit arbeiten

    Hallo,

    ich bin JAVA Newbie und spiele momentan etwas mit Syntax rum und da hab ich gleich mal so ne Frage

    Gibt es eine Möglichkeit das aktuelle Systemdatum (als Variable, Array o.ä.) einzulesen und damit zu arbeiten.
    Am Anfang will ichs mal ganz einfach machen, einfach so zum Test.

    also z.b.

    Datum ist z.b. 10.03.2003:

    if true dann Variable int b; auf 5 setzten und if false b=6; oder so. Mir gehts dabei auch ums Jahr. Was ich dabei etwas lernen möchte ist einfach der Umgang mit sowas. Das Ganze soll einfach auf der Kommandozeile laufen.

    momentan arbeite ich unter WinXP könnte aber auch Linux booten. Aber das OS sollte ja eigentlich egal sein.

    Vielen Dank.

    Gruß
    Pfanni

  2. #2
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Das Datum inklusive Uhrzeit, erhälts du über den Calendar

    Code:
    import java.util.Calendar;
    import java.util.Date;
    
    Calendar cal = Calendar.getInstance();
    Date date = cal.getTime();
    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  3. #3
    Registrierter Benutzer
    Registriert seit
    06.10.2002
    Beiträge
    23
    Danke für den Tipp mit dem Calender.

    hab es so eingebunden und auch mal mit System.out.println ausgeben lassen.
    Aber wie bekomme ich da denn jetzt einen bestimmten Eintrag raus, mit dem ich dann weiter arbeiten kann.
    Also ich bräuchte z.B. nur das Jahr in einem String oder Array o.ä., da ich so was in der Richtung basteln will wo ich frage ob das Jahr stimmt oder nicht........
    Danke.

    Pfanni

  4. #4
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Also ich habe hier eine Klasse (ich glaube die ist aus Core Java), die kan sehr gut mit Daten umgehen. Die kann auch die Tage zwischen zwei Daten berechen, ein normales deutsches Datum in ein SQL konformes Datum umwandeln und noch viel mehr. Damit programmiert es sich viel einfacher als mit den schrecklichen Klassen von Sun, vor allem GregoriaCalendar ist so eine Krux, die man gar nicht benutzen möchte.

    Wenn Du willst schicke ich Sie Dir zu.

    Grüße fs111

  5. #5
    Registrierter Benutzer
    Registriert seit
    06.10.2002
    Beiträge
    23
    @fs11
    würde mich sehr über die Klasse freuen. Die Frage ist nur ob ich auch damit umgehen kann. Vielleicht könntest mir ein kleines BSP mitschicken. Wäre nett.
    Danke.

    Gruß
    Pfanni
    Geändert von Pfanni (24-12-2007 um 00:08 Uhr)

  6. #6
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Original geschrieben von Pfanni

    Also ich bräuchte z.B. nur das Jahr in einem String oder Array o.ä., da ich so was in der Richtung basteln will wo ich frage ob das Jahr stimmt oder nicht........
    Dazu mein Tipp: in der Doku nachschaun

    Code:
    Calendar cal = Calendar.getInstance();
    int year = cal.get(Calendar.YEAR);
    Calendar arbeitet über Konstanten, die am Anfang in der Doku beschrieben sind, zum Beispiel eben Calendar.YEAR

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  7. #7
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Hier nun also der Quellcode der Day Klasse:

    Code:
    import java.util.*;
    import java.io.*;
    import java.lang.Math;
    
    
    public class Day
    {
    
            private int day = 0;
            private int month = 0;
            private int year = 0;
    
    
            /**
            * Constructs a today's date
            */
            public Day()
            {
            GregorianCalendar todaysDate = new GregorianCalendar();
            year = todaysDate.get(Calendar.YEAR);
            month = todaysDate.get(Calendar.MONTH) + 1;
            day = todaysDate.get(Calendar.DAY_OF_MONTH);
    
            }//constructor
    
    
    
            /**
            * Constructs a specific date
            *
            * @param yyyy year (full year, e.g., 1996,
            *    <i>not</i> starting from 1900)
            *  @param m month
            *  @param d day
            *  @exception IllegalArgumentException if yyyy m d not a
            *    valid date
            */
    
            public Day(int yyyy, int m, int d)
            throws IllegalArgumentException
            {
                    year = yyyy;
                    month = m;
                    day = d;
    
                    if (!isValid())
                            throw new IllegalArgumentException();
    
            }//constructor
    
    
            /**
            * Constructs a specific date from a String. The String must be in
            * format (D)D.(M)M.YYYY
            *
            * @param a String representation of a Date
            * @exception IllegalArgumentException if yyyy m d not a
            *    valid date
            */
    
            public Day(String dString)
            throws IllegalArgumentException
            {
                    int index = 0;
                    int oldindex = 0;
    
                    try
                    {
                              index = dString.indexOf('.',oldindex);
                              day = Integer.parseInt( dString.substring(oldindex,index) );
    
                              oldindex = index+1;
                              index = dString.indexOf('.',oldindex);
                              month = Integer.parseInt( dString.substring(oldindex,index) );
    
                              oldindex = index +1;
                              year = Integer.parseInt( dString.substring(oldindex,dString.length() ) );
                    }
                    catch (IndexOutOfBoundsException e)
                    {
                              //do nothing, because IllegalArgumentException is thrown below instead
                    }
    
    
                    if (!isValid() || dString.substring(oldindex,dString.length()).length() != 4 )
                            throw new IllegalArgumentException();
    
            }//constructor
    
    
    
            /**
            * Constructs a specific date from a String.
            * If SQLTimestamp is false, the String must be in
            * format (D)D.(M)M.YYYY
            * If SQLTimestamp is true, the String must be in
            * format YYYY-MM-DD HH.MM.SS
            * The Daytime information will be ignored then
            *
            * @param a String representation of a Date
            * @param format of the Date string
            * @exception IllegalArgumentException if yyyy m d not a
            *    valid date
            */
    
            public Day(String dString, boolean SQLTimestamp)
            throws IllegalArgumentException
            {
                    int index = 0;
                    int oldindex = 0;
    
                    try
                    {
                            if (SQLTimestamp) { //if dString is a timestamp, rewrite it to DD.MM.YYYY
    
                                    String newstr="";
                                    newstr+=dString.substring(8,10) +".";
                                    newstr+=dString.substring(5,7) +".";
                                    newstr+=dString.substring(0,4);
    
                                    dString=newstr; //assign dString the value of the rewritten date string
                            }
    
                            index = dString.indexOf('.',oldindex);
                            day = Integer.parseInt( dString.substring(oldindex,index) );
    
                            oldindex = index+1;
                            index = dString.indexOf('.',oldindex);
                            month = Integer.parseInt( dString.substring(oldindex,index) );
    
                            oldindex = index +1;
                            year = Integer.parseInt( dString.substring(oldindex,dString.length() ) );
                    }
                    catch (IndexOutOfBoundsException e)
                    {
                      //do nothing, because IllegalArgumentException is thrown below instead
                    }
    
                    if (!isValid() || dString.substring(oldindex,dString.length()).length() != 4 )
                            throw new IllegalArgumentException();
    
            }//constructor
    
    
    
    
            /**
            * Gets the day of the month
            *
            * @return the day of the month (1...31)
            *
            */
    
            public int getDay()
            {
                    return day;
            }//getDay
    
    
    
            /**
            * Gets the month
            *
            * @return the month (1...12)
            *
            */
    
            public int getMonth()
            {
                    return month;
            }//getMonth
    
    
    
            /**
            * Gets the year
            *
            * @return the year (counting from 0, <i>not</i> from 1900)
            *
            */
    
            public int getYear()
            {
                    return year;
            }//getYear
    
    
    
            /**
            * Returns SQL compliant String representation of the day (YYYY-MM-DD)
            *
            * @return a string representation of the day
            *
            */
    
            public String toString()
            {
    
                    return toSQLDate();
            }//toString
    
    
            /**
            * Returns String representation of the day (DD.MM.YYYY)
            * if normalDate is true, otherwise result is an SQL Date String
            *
            * @return a string representation of the day
            *
            */
            public String toString(boolean normalDate)
            {
                    if (!normalDate)
                            return toSQLDate();
                    else
                            return day+"."+month+"."+year;
            }//toString
    
            /**
            * Returns an SQL comliant DATE String
            *
            * @return an SQL comliant DATE String
            *
            */
            public String toSQLDate() {
    
                    String retval = "";
                    if (Math.abs(year) < 1000)
                            retval +="0";
                    if (Math.abs(year) < 100)
                            retval +="0";
                    if (Math.abs(year) < 10)
                            retval+="0";
                    retval +=year +"-";
    
                    if (month < 10)
                            retval+="0";
                    retval+= month +"-";
    
                    if (day < 10)
                            retval+="0";
                    retval+= day;
    
                    return retval;
    
            }//toSQLDate
    
    
            /**
            * Compares this Day against another object
            *
            * @param obj another object
            * @return true if the other object is identical to this Day object
            *
            */
    
            public boolean equals(Object obj)
            {
                    if (!getClass().equals(obj.getClass()))
                            return false;
    
                    Day b = (Day)obj;
                            return day == b.day && month == b.month && year == b.year;
            }//equals
    
    
                    //advances the date by the submitted number of days
                    //(may also be negative value)
            public void advanceDate(int days) {
                    fromJulian(toJulian()+days);
    
            }//moveDays
    
    
            /**
            * Calculates the number of days between this day and the
            * submitted day.
            *
            * @param b  any date
            * @return  the number of days between this day and b
            *    ( > 0 if this day comes after b )
            */
    
            public int daysBetween(Day b)
            {
                    return toJulian() - b.toJulian();
    
            }//daysBetween
    
    
    
            /*
            * Computes the number of days between two dates
            *
            * @return true if this is a valid date
            */
    
            public boolean isValid()
            {
                    Day t = new Day();
                    t.fromJulian(this.toJulian());
    
                    return (t.day == day && t.month == month
                       && t.year == year);
            }//isValid
    
    
            /*
            * Converts a day to the julian calendar.
            *
            * @return The Julian day number that begins at noon of this day.
            *  Positive year signifies A.D., negative year B.C.
            *  Remember that the year after 1 B.C. was 1 A.D.
            *
            *  A convenient reference point is that May 23, 1968 noon
            *  is Julian day 2440000.
            *
            *  Julian day 0 is a Monday.
            *
            *  This algorithm is from Press et al., Numerical Recipes
            *  in C, 2nd ed., Cambridge University Press 1992
            */
    
            public int toJulian()
            {
                    int jy = year;
    
                    if (year < 0) jy++;
                      int jm = month;
    
                    if (month > 2)
                      jm++;
    
                    else
                    {
                      jy--;
                      jm += 13;
                    }
    
                    int jul = (int) (java.lang.Math.floor(365.25 * jy)
                    + java.lang.Math.floor(30.6001*jm) + day + 1720995.0);
    
                      // Gregorian Calendar adopted Oct. 15, 1582
                    int IGREG = 15 + 31*(10+12*1582);
    
                      // change over to Gregorian calendar
                    if (day + 31 * (month + 12 * year) >= IGREG)
                    {
                      int ja = (int)(0.01 * jy);
                      jul += 2 - ja + (int)(0.25 * ja);
                    }
    
                    return jul;
    
            }//toJulian
    
    
    
            /**
            * Converts a Julian day to a calendar date
            *
            * This algorithm is from Press et al., Numerical Recipes
            * in C, 2nd ed., Cambridge University Press 1992
            *
            * @param j  the Julian date
            */
    
            public  void fromJulian(int j)
            {
                    int ja = j;
    
                      //the Julian date of the adoption of the Gregorian calendar
                    int JGREG = 2299161;
    
                      //cross-over to Gregorian Calendar produces this correction
                    if (j >= JGREG)
                    {
                            int jalpha = (int)(((float)(j - 1867216) - 0.25) / 36524.25);
                            ja += 1 + jalpha - (int)(0.25 * jalpha);
                    }
    
                    int jb = ja + 1524;
                    int jc = (int)(6680.0 + ((float)(jb-2439870) - 122.1)/365.25);
                    int jd = (int)(365 * jc + (0.25 * jc));
                    int je = (int)((jb - jd)/30.6001);
                    day = jb - jd - (int)(30.6001 * je);
                    month = je - 1;
                    if (month > 12) month -= 12;
                    year = jc - 4715;
                    if (month > 2) --year;
                    if (year <= 0) --year;
    
            }//fromJulan
    
    
    }//Day
    Du kanns einfacht mit Day myDay = new Day ein neues Objekt dieses Typs erzeugen, welches das aktuelle Datum enthält. Außerdem kanns Du auch mit Day(TT.MM.YYYY) oder Day(SQLDATUM) neue Day Objekte erzeugen. Die Klasse ist insgesamt sehr gut dokumentiert, und sollte eigentlich so verständlich sein. Mir hat sie vorallem im Zusammenspiel mit einer DB geholfen, weil man ganz einfach Daten ins SQL-Format übertragen kann, und einem insgesamt viel Arbeit abgenommen wird.

    Grüße fs111

  8. #8
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    pffff,

    da stimme ich doch lieber für anda_skoas Variante und ein bisschen Javadoc lesen ... - wenn du mal weisst, wie die benötigte Klasse heisst, steht dort nämlich meist fast alles drin, was du brauchst

    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  9. #9
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Was bitte soll denn daran toller sein sich mit so unlogischen Konstrukten, wie etwa dass Monate ab 0 gezählt werden, Tage higegen nicht. Da ist diese Klasse um längen besser. Auch wenn man viel mit DB und Daten (also Plural von Datum) macht, ist dies Klasse unschlagbar. Außerdem ist es ja auch der Sinn von OO zu abstrahieren und mit Objekten zu arbeiten, und das genau macht man ja dann mit den Objekten.

    fs111

  10. #10
    Administrator Avatar von anda_skoa
    Registriert seit
    17.11.2001
    Ort
    Graz, Österreich
    Beiträge
    5.477
    Was an der Klasse auf jedenfall problematisch ist, ist der hardcodierte Gregorian Calendar.

    Sobald der nicht dem Calendar der Locale entspricht, ist die Klasse unbrauchbar.
    Schwer zu finden, wenn man ein Programm ausgeliefert hat.

    Außerdem hätte man wahrscheinlich auch von Date ableiten können.

    So muss man für alle Formatierer neu schreiben.

    Ciao,
    _
    Qt/KDE Entwickler
    Debian Benutzer

  11. #11
    Registrierter Benutzer Avatar von fs111
    Registriert seit
    23.03.2002
    Beiträge
    594
    Wo siehst Du da denn Probleme? Wenn ich eine online Anwendung habe, dann ist ja für den Betreiber die Zeit/das Datum an seinem Ort interessant, und wenn es eine Anwendung auf der Maschine des Benutzers ist, dann stimmt das Datum ja ohnehin. Wo sollte da was schief laufen?

    fs111

  12. #12
    Registrierter Benutzer
    Registriert seit
    24.02.2003
    Beiträge
    43

    OT

    hat nix mit dem thema zu tun:

    aber nen post mit [java] oder [c] [c++] zu starten, ist ne gute idee.
    dann weiß jeder gleich mit was er es zu tun hat.

    könnte man ja als "codex" festlegen.

    *gradzuspäterstundeaufgefallen*

    pulp

  13. #13
    Registrierter Benutzer
    Registriert seit
    06.10.2002
    Beiträge
    23
    @ fs111
    vielen Dank für deine Hilfe mit der Klasse. Hab damit jetzt mal etwas rumgespielt und komme damit soweit zurecht. Als Newbie versteh ich eh so einige Zusammenhänge noch nicht, weshalb für mich die JAVA-Docu (http://java.sun.com/j2se/1.4.1/docs/index.html) an sich tlw. doch recht unverständlich ist. Aber das wird schon noch.....jeder fängt mal klein an.

    @all
    Hab jetzt für meine Frage zwei Lösungsansätze gefunden. Einmal ohne der Klasse von fs111 und einmal mit.

    Werft doch bitte nochmal einen Blick drauf uns sagt mir ob das zu umständlich ist. Mit dem String hab ich gearbeitet, da ich an die Einzelziffern des Jahres mit charAt(3) ran will um damit z.B. zu rechnen.

    mit der Klasse von fs111:
    Code:
    		Day myDay = new Day();
    
    		int test = myDay.getYear();
    		String ziffer4 = ""+ test;
    		System.out.println("Jahr-String: "+ ziffer4);
    		System.out.println("letzte Jahresziffer: " + ziffer4.charAt(3));

    Code:
    		GregorianCalendar todaysDate = new GregorianCalendar();
    		int year = todaysDate.get(Calendar.YEAR);
    		System.out.println("GregorianCalendar - Typ: " +year);
    		
    		String test = "" +year;
    		System.out.println("Jahr-String: " +test);
    		System.out.println("Jahr-String 4te Ziffer: " +test.charAt(3));
    Gruß
    Pfanni

  14. #14
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    @fs111

    Was bitte soll denn daran toller sein sich mit so unlogischen Konstrukten, wie etwa dass Monate ab 0 gezählt werden, Tage higegen nicht.
    Ich hab nie gesagt, dass ich unlogiken wie diese toll finde, nur:
    Wenn man in einem Programm irgendwo mal _ein_ Datum braucht, dann ist diese Klasse Overhead und die direkte Verwendung der API imho einfacher. Falls du das ganze Programm hindurch nur mit daten herumbastelst, mag das was anderes sein...

    Wenn du für jede unlogik eine solche, durchaus praktische Klasse basteln würdest ...


    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  15. #15
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    Ich glaub das ist das einfachste, allerdings kannst du das alles zusammennehmen, etwa so (ungetestet):

    Code:
    (new GregorianCalendar()).todaysDate.get(Calendar.YEAR).toString().charAt(3));
    MfG Peschmä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •