| 

.NET C# Java Javascript Exception

Datum vergleichen

Dies ist das Archiv des ehemaligen Forums zum Thema Groovy, Grails, Griffon und Bean Scripting Framework, welches unter groovy-forum.de existierte. Die neue Adresse des Groovy-Forums ist: http://codekicker.de/fragen/themen/groovy.


Datum vergleichen

ScorpionESC - 12.08.2010 16:05
Hallo Community,

ich brauche wieder eure Hilfe als blutiger Groovy-Anfänger...

Ich habe folgendes Problem:

Ich habe eine Datei in die Datum und Uhrzeit geschrieben werden (sieht so aus: 2010-08-12 15:59:16.0).

Der Wert in der Datei darf nicht älter sein als 30 Minuten. Heißt also, dass ich von meiner aktuellen Uhrzeit 30 Minuten abziehen muss und genau das ist mein Problem!

Mein Code sieht zurzeit so aus:

import groovy.sql.*
import groovy.text.*
import java.sql.*
import java.text.SimpleDateFormat
import java.util.Date

ausgabe = new File('SCAN.txt').text //Mein o.g. Datum aus der Datei

Date dt = new Date()
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.0")
println df.format(dt)


if (ausgabe == df.format(dt))
	println 'Super'
else
	println 'Nope'

Hier wird nur verglichen, ob das Datum in der Datei dem aktuellen entspricht, nicht ob es älter als 30 Minuten ist.

Könnt ihr mir hier helfen?

Vielen Dank.

Gruß Björn


Re: Datum vergleichen

mpuhlmann - 12.08.2010 16:19
Hallo Björn,

ich hab bereits im Wiki einen interessanten Ansatz zum Thema Datumsberechnung hinterlegt. Du findest ihn hier. Stichwort hier ist die Verwendung der TimeCategory.

Ich hoffe, dass dir das weiter hilft.

Gruss

Marco


Re: Datum vergleichen

manfred - 12.08.2010 19:33
Also 30 Minutes abziehen geht ganz einfach mit java.util.Calendar
scala> val cal = Calendar.getInstance
cal: java.util.Calendar = java.util.GregorianCalendar[time=1281634235560,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Europe/London",offset=0,dstSavings=3600000,useDaylight=true,transitions=242,lastRule=java.util.SimpleTimeZone[id=Europe/London,offset=0,dstSavings=3600000,useDaylight=true,startYear=0,startMode=2,startMonth=2,startDay=-1,startDayOfWeek=1,startTime=3600000,startTimeMode=2,endMode=2,endMonth=9,endDay=-1,endDayOfWeek=1,endTime=3600000,endTimeMode=2]],firstDayOfWeek=2,minimalDaysInFirstWeek=4,ERA=1,YEAR=2010,MONTH=7,WEEK_OF_YEAR=32,WEEK_OF_MONTH=2,DAY_OF_MONTH=12,DAY_OF_YEAR=224,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=2,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=30,SECOND=35,MILLISECOND=560,ZONE_OFFSET=0,DST_OFFSET=3600000]

scala> cal.getTime                   
res4: java.util.Date = Thu Aug 12 18:30:35 BST 2010

scala> cal.add(Calendar.MINUTE, -30) 

scala> cal.getTime                  
res6: java.util.Date = Thu Aug 12 18:00:35 BST 2010

Sorry, der Code ist Scala, funktioniert aber bei Java/Groovy genauso.

Wenn Du vergleichen willst würde ich auf Millisekunden zurück per cal.getTimeInMillis und die vergleichen.


Manfred


Re: Datum vergleichen

Wicki - 13.08.2010 09:52
Hallo,

hier mal ein Vorschlag in Java/Groovy:
import java.text.SimpleDateFormat
import java.util.Date

ausgabe = new File('SCAN.txt').text //Mein o.g. Datum aus der Datei

SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.0")
Date dt1 = df.parse(ausgabe)
Date dt2 = new Date()
//Vergleich beider Werte auf Basis von Millisekunden
if (dt2.getTime() - dt1.getTime() > 30 * 60 * 1000)
  println 'zu gross'
else
  println 'okay'

Gruß Wicki


Re: Datum vergleichen

mpuhlmann - 13.08.2010 10:13
Hallo,

da inzwischen mehrere Lösungen gepostet wurden, möchte ich hier dann doch die Lösung via TimeCategory von Groovy darstellen:

def ausgabe = new File('SCAN.txt').text //Mein o.g. Datum aus der Datei

def ausgabeAlsDate = Date.parse("yyyy-MM-dd HH:mm:ss.0", ausgabe)

use (groovy.time.TimeCategory) {
        def now = new Date()

        if (ausgabeAlsDate < (now - 30.minutes))
	        println 'Älter als 30 Minuten'
        else
	        println 'Jünger als 30 Minuten'
}

Gruss

Marco


Re: Datum vergleichen

christian - 13.08.2010 12:57
Damit bist du ja auch gleich auf das Hauptproblem von solche Code-Kosmetik gestoßen: es wird verdammt schwer nachvollziehbar! Technisch gesehen wird dem Integer-Objekt durch die Expando-Meta-Klasse eine Methode hinzugefügt.

Gruß
Christian


Re: Datum vergleichen

mabu - 23.08.2010 15:40
Auch wenn's jetzt ein wenig spät kommt:
man kann mit TimeCategory auch folgendes machen:

Language: Groovy
use&#40;TimeCategory&#41;&#123; dateToProof = new Date&#40;&#41; dateToProof.setTime&#40;intZeitstempel&#41; //10stellige Zeitstempelnummer if&#40; dateToProof < 30.minutes.ago.time&#41;&#123; //dann sollte es mehr als eine halbe Stunde her sein &#125; &#125;


Stelle deine Groovy-Frage jetzt!


Diese Seite zeigt den Thread "Datum vergleichen" der ehemaligen Webseite groovy-forum.de, welche durch einen Serverunfall zerstört wurde. codekicker.de hat viele Konversationen über die beliebte Programmiersprache Groovy und zugehörige Frameworks wie das Grails-Framework retten können.

Hast Du eine Frage zum Thema Groovy, Grails oder allgemein Java? Viele ehemalige groovy-forum.de Mitglieder beantworten dir auf codekicker.de deine Frage! Stelle jetzt eine Frage!

Viele weitere Diskussionen zu Grails und Groovy befinden sich auf der Threadübersicht des alten groovy-forum.de.