2011-12-08 17 views
5

Eventuali duplicati:
Calculate date/time difference in javaconversione di una stringa data in millisecondi in java

come sarebbe una data futura, come Sab 17 febbraio 2012 convertito in millisecondi in Java che può quindi essere sottratto dall'ora corrente in millisecondi per ottenere il tempo rimanente fino a quella data futura.

+1

Spesso è preferibile utilizzare una libreria con informazioni su Date (ad es. [Joda Time)] (http://joda-time.sourceforge.net/0) che convertire in millisecondi e quindi riconvertire: millisecondi possono perdere informazioni su cose come differenze di fuso orario, mesi senza 30 giorni, anni bisestili, ecc. Quindi a seconda del livello di precisione necessario ... –

risposta

19

La tecnica più semplice sarebbe quella di utilizzare DateFormat:

String input = "Sat Feb 17 2012"; 
Date date = new SimpleDateFormat("EEE MMM dd yyyy", Locale.ENGLISH).parse(input); 
long milliseconds = date.getTime(); 
long millisecondsFromNow = milliseconds - (new Date()).getTime(); 
Toast.makeText(this, "Milliseconds to future date="+millisecondsFromNow, Toast.LENGTH_SHORT).show(); 

Una tecnica più difficile (che fa sostanzialmente quello che DateFormat fa per voi) coinvolge l'analisi da te (questo sarebbe non essere considerato best practice):

String input = "Sat Feb 17 2012"; 
String[] myDate = input.split("\\s+"); 
int year = Integer.parseInt(myDate[3]); 
String monthString = myDate[1]; 
int mo = monthString.equals("Jan")? Calendar.JANUARY : 
      monthString.equals("Feb")? Calendar.FEBRUARY : 
      monthString.equals("Mar")? Calendar.MARCH : 
      monthString.equals("Apr")? Calendar.APRIL : 
      monthString.equals("May")? Calendar.MAY : 
      monthString.equals("Jun")? Calendar.JUNE : 
      monthString.equals("Jul")? Calendar.JULY : 
      monthString.equals("Aug")? Calendar.AUGUST : 
      monthString.equals("Sep")? Calendar.SEPTEMBER : 
      monthString.equals("Oct")? Calendar.OCTOBER : 
      monthString.equals("Nov")? Calendar.NOVEMBER : 
      monthString.equals("Dec")? Calendar.DECEMBER : 0; 
int day = Integer.parseInt(myDate[2]); 
Calendar c = Calendar.getInstance(); 
c.set(year, mo, day); 
long then = c.getTimeInMillis(); 
Time current_time = new Time(); 
current_time.setToNow(); 
long now = current_time.toMillis(false); 
long future = then - now; 
Date d = new Date(future); 
//TODO use d as you need. 
Toast.makeText(this, "Milliseconds to future date="+future, Toast.LENGTH_SHORT).show(); 
+0

Oppure, è possibile utilizzare SimpleDateFormat per eseguirlo in 2 righe di codice. – dusktreader

+2

@dusktreader, se stai per votare e fornire un nuovo suggerimento, dovresti almeno fornire il codice. La mia risposta è molto ben pensata e fornisce un sacco di codice di lavoro. Questo certamente non merita un voto negativo, e il tuo commento non è produttivo. – Phil

+3

Questo è un classico esempio di una cattiva pratica di codifica che vedo sempre. Questa funzionalità è fornita in un'interfaccia molto semplice e pulita. Rolling your own è anti-produttivo. Ho downvoted perché ho sentito onestamente che questa era una risposta scarsa, e ho perfino commentato per dirti perché (cosa che non dovevo fare). Ecco il codice, anche se questo è un argomento morto che è stato chiuso per sei mesi: Formato DateFormat = new SimpleDateFormat ("EEE MMM dd yyyy"); long millis = format.parse ("Sab Feb 17 2012"). GetTime(); – dusktreader

4

Prima di iniziare, è necessario analizzare String per ottenere la relativa rappresentazione della data. Here sono esempi e alcuni documenti. Quindi devi chiamare il metodo getTime() della tua Data.

+0

Link non funziona più. – Codeversed

2

Passo anno, mese e giorno della data futura in data del presente codice e diff variabile darà il tempo di millisecondo fino a tale data,

Date date = new GregorianCalendar(year, month, day).getTime(); 
    Date today = new Date(); 
    long diff = date.getTime() - today.getTime(); 
3
DateFormat format = new SimpleDateFormat("EEE MMM dd yyyy", Locale.US); 
long futureTime = 0; 
try { 
    Date date = format.parse("Sat Feb 17 2012"); 
    futureTime = date.getTime(); 
} catch (ParseException e) { 
    Log.e("log", e.getMessage(), e); 
} 

long curTime = System.currentTimeMillis(); 
long diff = futureTime - curTime; 
1

Si può semplicemente chiamare la getTime() metodo di data oggetto. si prega di seguire attraverso il campione di seguito

import java.util.Date; 

public class Test { 
    @SuppressWarnings("deprecation") 
    public static void main(String[] args) { 

     System.out.println(new Date("Sat Feb 17 2012").getTime()); 

    } 

} 
1
try { String str_date="11-June-07"; 
    SimpleDateFormat formatter ; 
    Date date ; 
    formatter = new SimpleDateFormat("dd-MMM-yy"); 
    date = (Date) formatter.parse(str_date); 
    Log.i("test",""+date); 
    } catch (Exception e) 
    {System.out.println("Exception :"+e); } 

    Date d = new Date(); 
    long time = d.getTime(); 
    long timeDiff = time - lastTime; 

//timeDiff will contain your value. 
//import these two, 
//import java.text.SimpleDateFormat; 
//import java.util.Date; 
Problemi correlati