tutorials.de Buch-Aktion 05/2012
Like Tree4Danke
  • 1 Beitrag von twagi
  • 1 Beitrag von Technoblade
  • 1 Beitrag von SE
  • 1 Beitrag von Anime-Otaku
ERLEDIGT
JA
ANTWORTEN
6
ZUGRIFFE
646
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von January
    January January ist offline Mitglied Bronze
    Registriert seit
    Aug 2010
    Beiträge
    32
    Hallo zusammen.

    Gibt es eine Standard-Möglichkeit (die ich bisher nicht gefunden habe) zu einem long-Wert (milliseconds since 1970 Jan 1 0:00 GMT) den Tagesanfang und das Ende zu bestimmen? Ich brauche also sozusagen die Mitternachts-longs zu einem beliebigem long.

    Zur Veranschaulichung meiner Frage:
    Jetzt gerade sind 1305036641658 Millisekunden sein 1970 vergangen. Wie viele waren es heute als der Tag begann und wie viele werden es sein, wenn der Tag endet?

    Ich stehe gerade etwas auf dem Schlauch, vielleicht kann mir ja jemand von euch helfen?
    Danke schon im Voraus!
    January
     

  2. #2
    twagi twagi ist offline Mitglied Bronze
    Registriert seit
    Jun 2003
    Beiträge
    30
    Hi,

    meinst Du sowas:

    Code java:
    1
    2
    3
    4
    5
    6
    7
    
    Calendar theCalendar = Calendar.getInstance();
            
    theCalendar.set(2011, 5, 10, 0, 0, 0);
    long timeInMillis = theCalendar.getTimeInMillis();
        
    theCalendar.set(2011, 5, 10, 23, 59, 59);
    timeInMillis = theCalendar.getTimeInMillis();

    Gruß twagi
    January bedankt sich. 

  3. #3
    Technoblade Technoblade ist offline Mitglied Gold
    Registriert seit
    Feb 2009
    Beiträge
    193
    Ist an sich ganz einfach. Evtl. sagt dir ja der Modulo-Operator etwas. Verknüpfst du zwei Zahlen mit dem erhältst du den Rest der übrig bleibt wenn du die erste Zahl durch die zweite teilst. In Java sieht der Operator so aus wie das Prozentzeichen.
    Mit 8 % 5 berechnest du also z.B. den Rest den 8 der bei der Ganzzahldivision durch 5 übrig bleibt. Also in diesem Fall 3.

    Gut, was hat das jetzt mit dem Datum und Mitternacht zu tun. Ganz einfach:
    System.currentMillis() gibt dir die Millisekunden seit Punkt 0 Uhr am 1.1. 1970 zurück.
    Nun hat ein Tag genau 24*60*60*1000 Millisekunden. Ist also die aktuelle Zeit ohne Rest durch diese Zahl teilbar, so ist es Mitternacht.
    Folgende Methode gibt dir also korrekt zurück ob es gerade Punkt Mitternacht ist:

    Code java:
    1
    2
    3
    
    public boolean isMidnight(long time) {
        return time % 86400000 == 0;
    }
    January bedankt sich. 

  4. #4
    Avatar von January
    January January ist offline Mitglied Bronze
    Registriert seit
    Aug 2010
    Beiträge
    32
    Hallo twagi, hallo Technoblade.

    Danke erstmal für eure Antworten. Ihr habt mich schon mal in eine neue Richtung gestoßen, auf Modulo hätte ich auch kommen können. Allerdings hat ein Tag leider nicht immer genau 86400000 ms, dank der überflüssigen Sommerzeit :-/ . Ich habe jetzt trotzdem versucht, zwei Methoden zu schreiben, die mir den Tag-Anfang und das Tag-Ende als long liefern (das sind die Methoden die ich brauche):

    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    
    package test;
     
    import java.sql.Date;
    import java.sql.Time;
     
    public class TagesGrenze {
     
        public static void main(String[] args) {
            long anzeigeVon = tagStart(System.currentTimeMillis());
            System.out.println(new Date(anzeigeVon));
            System.out.println(new Time(anzeigeVon));
            long anzeigeBis = tagEnde (System.currentTimeMillis());
            System.out.println(new Date(anzeigeBis));
            System.out.println(new Time(anzeigeBis));
     
        }
     
        private static long tagEnde(long zeitPunkt) {
            long bisMitternacht = 86400000 -(zeitPunkt % 86400000);
            return zeitPunkt + bisMitternacht;
        }
     
        private static long tagStart(long zeitPunkt) {
            long heuteVergangen = zeitPunkt % 86400000;
            return zeitPunkt - heuteVergangen;
        }
    }

    Als Ergebnis kommt allerdings das hier raus:
    2011-05-10
    02:00:00
    2011-05-11
    02:00:00

    Ich schätze mal, die +2Stunden kommen von der +1Zeitzone und der Sommerzeit. Vielleicht kann mir ja jemand noch in der Richtung helfen, kann auch sein, dass ich Date und Time falsch verwende...

    Danke!
    January
     

  5. #5
    SE Tutorials.de Gastzugang
    Wir hatten hier erst vor ein paar Tagen einen Thread in dem es darum ging von einer gegebenen Zeit die Zulu-Zeit *also GMT* herauszubekommen. Müsstest du gleich auf der Seite finden. Bau das dann noch in deinen Code ein und es sollte die Lösung sein.
    January bedankt sich. 

  6. #6
    Avatar von January
    January January ist offline Mitglied Bronze
    Registriert seit
    Aug 2010
    Beiträge
    32
    Danke für eure Hilfe! Jetzt klappt es so wie ich mir das vorstelle.

    Falls noch jemand dran interessiert ist:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    private long tagEnde(long zeitPunkt) {
            
            long bisMitternacht = 86400000 -(zeitPunkt % 86400000) - 3600000 ; //GMT
            
            Calendar zeitpunkt = Calendar.getInstance();
            zeitpunkt.setTimeInMillis(zeitPunkt);
            if (zeitpunkt.getTimeZone().inDaylightTime(zeitpunkt.getTime())){
                bisMitternacht -= 3600000; // Sommerzeit
            }
            
            return zeitPunkt + bisMitternacht;
        }
     
        private long tagStart(long zeitPunkt) {
            long heuteVergangen = zeitPunkt % 86400000 + 3600000 ; //GMT
            Calendar zeitpunkt = Calendar.getInstance();
            zeitpunkt.setTimeInMillis(zeitPunkt);
            if (zeitpunkt.getTimeZone().inDaylightTime(zeitpunkt.getTime())){
                heuteVergangen += 3600000; // Sommerzeit
            }
            return zeitPunkt - heuteVergangen;
        }
     

  7. #7
    Anime-Otaku Anime-Otaku ist offline Mitglied Brillant
    Registriert seit
    Aug 2005
    Ort
    Karlsruhe (Baden-Württemberg)
    Beiträge
    905
    Ich würde das einfach nur mit dem Calendar-Objekt machen oder mit der besseren JodaTime Library.
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    Calendar start = Calendar.getInstance();
    start.set(Calendar.HOUR_OF_DAY, 0);
    start.set(Calendar.MINUTES, 0);
    start.set(Calendar.SECONDS, 0);
    start.set(Calendar.MILLISECONDS, 0);
    System.out.println(start.getTime());
    System.out.println(start.getTimeInMillis());
    //Hat nun Zeitstempel  von 0 Uhr
    start.add(Calendar.DAY_OF_MONTH, 1);//ein Tag dazu addieren
    System.out.println(start.getTime());
    System.out.println(start.getTimeInMillis());

    Alles ohne IDE geschrieben, daher könnten noch Compiler-Fehler vorhanden sein.
    January bedankt sich. 
    Wäre super wenn ihr euren Code in dieser Form einfügt:
    Code java:
    1
    
    System.out.println("Hello World");
    [java]System.out.println("Hello World");[/java]
    Für erledigte Threads dürft ihr den "erledigt"-Button anklicken!
    Über Dank freut sich jeder, der euch geholfen hat - ein Klick auf "Danke" kostet ja nicht mal was
    Blog: http://javaeffective.wordpress.com/

Ähnliche Themen

  1. Normalformen und Schlüsselkandidaten bestimmen anhand von FD Diagrammen
    Von kossy im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.05.08, 10:33
  2. Alter anhand Datum bestimmen
    Von A5 Infoschlampe im Forum PHP
    Antworten: 8
    Letzter Beitrag: 30.04.05, 13:26
  3. Formular anhand DTD erstellen, anhand XML füllen
    Von zweistein im Forum XML Technologien
    Antworten: 0
    Letzter Beitrag: 05.04.05, 19:59
  4. Timestamp VOR 1970
    Von DoRiMaN im Forum PHP
    Antworten: 6
    Letzter Beitrag: 16.03.04, 13:48
  5. Dateigröße anhand einer url bestimmen
    Von SpAder im Forum PHP
    Antworten: 7
    Letzter Beitrag: 24.04.03, 13:51

Stichworte