2012-05-14 10 views
10

Ho memorizzare una java.sql.Timestamp in una banca datiPostgreSQL come Timestamp tipo di dati e voglio scoprire la differenza in minuti o ore da quello memorizzato nel DB alla corrente timestamp. Qual è il modo migliore per farlo? ci sono dei metodi per farlo o devo convertirlo a lungo o qualcosa del genere?Trova la differenza dell'ora o del minuto tra 2 java.sql.Timestamps?

+0

possibile duplicato di [Come calcolare la differenza tra due Java java.sql.Timestamps?] (Http://stackoverflow.com/questions/582278/how-to-calculate-the-difference-between- two-java-java-sql-timestamps) –

risposta

17

Ho finito di usare questo, voglio solo postarlo per gli altri se lo cercano.

public static long compareTwoTimeStamps(java.sql.Timestamp currentTime, java.sql.Timestamp oldTime) 
{ 
    long milliseconds1 = oldTime.getTime(); 
    long milliseconds2 = currentTime.getTime(); 

    long diff = milliseconds2 - milliseconds1; 
    long diffSeconds = diff/1000; 
    long diffMinutes = diff/(60 * 1000); 
    long diffHours = diff/(60 * 60 * 1000); 
    long diffDays = diff/(24 * 60 * 60 * 1000); 

    return diffMinutes; 
} 
+0

Sei il migliore! – dbrad

0

Utilizzare la funzione UNIX_TIMESTAMP per convertire DATETIME nel valore in ore, minuti e secondi.
E se non si è sicuri del valore più grande, utilizzare la funzione ABS.

1

Per data di aggiungere/rimuovere questa è la mia funzione generica:

public static Date addRemoveAmountsFromDate(Date date, int field, int amount) { 
    Calendar tempCalendar = Calendar.getInstance(); 

    tempCalendar.setTime(date); 
    tempCalendar.add(field, amount); 

    return tempCalendar.getTime(); 
} 

esempio per "campo": Calendar.HOUR_OF_DAY, Calendar.MINUTE

1

Basta usare:

Date.compareTo(Date) 

È devi convertire java.sql.Timestamps alla data prima.

+0

OP vuole trovare il tempo trascorso fino ad ora sotto forma di ore e minuti ma non se le date sono uguali, prima o dopo. –

+0

Questa risposta non ha nulla a che fare con la domanda –

0

date_part funzione può darti hours o come l'interesse può essere ma, è un tipo di substr e quindi non può fare affidamento su di esso. Devi convertire il tuo valore timestamp in unix_timestamp e extracttotale numero trascorso di ore, minuti o qualsiasi altra cosa rilevante dal timestamp al current_timestamp.

Esempio:

select age(now(), timestamp '2010-11-12 13:14:15'); 
//results the interval to be "*1 year 6 mons 2 days 04:39:36.093*" 

select date_part('hours', age(now(), timestamp '2010-03-10 02:03:04')); 
// results *4* which is not correct. 

valore corretto delle ore o altri possono essere calcolati dopo aver trovato il numero totale di secondi trascorsi dal 1970. Ciò può essere ottenuto utilizzando epoch con extract la funzione.
epoch restituisce il numero totale di secondi dal 1970-01-01 00:00:00-00. E, si sa, siamo in grado di convertirlo in ore dividendola con 3600.

Utilizzando epoch con extract:

select 
    EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15') as total_seconds, 
    EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15')/3600 as total_hours; 
    ROUND( 
     EXTRACT(EPOCH FROM current_timestamp - timestamp '2010-11-12 13:14:15')/3600 
     ) as total_hours_rounded; 

// risultati:

----------------+--------------+----------------------- 
| total_seconds | total_hours | total_hours_rounded | 
| --------------+--------------+----------------------| 
| 47452282.218 | 13181.189505 | 13181    | 
----------------+--------------+----------------------- 

Allo stesso modo, siamo in grado di estrai altri valori richiesti e usali come richiesto.

Problemi correlati