2011-12-08 133 views
5

Duplicar posibles:
Calculate date/time difference in javala conversión de una cadena de fecha en milisegundos en Java

cómo sería una fecha futura, como Mar Feb 17 de 2012 Ten convierte en milisegundos en Java que puede ser entonces resta del tiempo actual en milisegundos para obtener el tiempo restante hasta esa fecha futura.

+1

A menudo es mejor utilizar una biblioteca de fecha y hora (p. Ej. [Hora Joda]] (http://joda-time.sourceforge.net/0) que para convertir a milisegundos y luego para convertir de nuevo: milisegundos pueden perder información sobre cosas como diferencias de zona horaria, meses sin 30 días, años bisiestos, etc. De modo que, según el nivel de precisión necesario ... –

Respuesta

19

La técnica más simple sería utilizar 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 técnica más difícil (que básicamente hace lo DateFormat para con vosotros) implica analizar usted mismo (esto sería no se considera mejor práctica):

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

O bien, podría usar SimpleDateFormat para hacerlo en 2 líneas de código. – dusktreader

+2

@dusktreader, si va a votar abajo y proporcionar una nueva sugerencia, al menos debe proporcionar el código. Mi respuesta está muy bien pensada y proporciona mucho código de trabajo. Esto ciertamente no merece un voto negativo, y su comentario no es productivo. – Phil

+3

Este es un ejemplo clásico de una mala práctica de codificación que veo todo el tiempo. Esta funcionalidad se proporciona en una interfaz muy simple y limpia. Rodar por cuenta propia es anti-productivo. Bajé la votación porque, sinceramente, sentí que esta era una respuesta pobre, e incluso comenté para decirte por qué (lo que no necesitaba hacer). Aquí está el código, aunque este es un tema muerto que se ha cerrado durante medio año: Formato DateFormat = new SimpleDateFormat ("EEE MMM dd yyyy"); long millis = format.parse ("Sáb Feb 17 2012"). GetTime(); – dusktreader

4

En primer lugar, debe analizar su cadena para obtener su representación de fecha. Here son ejemplos y algunos documentos. Luego debes llamar al método getTime() de tu Fecha.

+0

El enlace ya no funciona. – Codeversed

2

años Pass, mes y día de la fecha futura en la fecha de este código y diff variables dará el tiempo de milisegundos hasta esa fecha,

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

Usted puede simplemente llamar a la getTime() método de objeto de fecha. siga a través del ejemplo siguiente

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; 
Cuestiones relacionadas