Pregunta

¿Cuál es la mejor manera de convertir una String en el formato '2 de enero de, 2010' a un Date en Java?

Por último, quiero romper el mes, el día y el año como enteros de modo que pueda utilizar

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

para convertir la fecha en el tiempo.

¿Fue útil?

Solución

Esa es la manera más dura, y los java.util.Date setter métodos han sido desuso desde Java 1.1 (1997). Simplemente formato a la fecha usando SimpleDateFormat utilizando un modelo de formato que coincida con el de entrada cadena.

En el caso específico de "2 de enero de 2010" como la cadena de entrada:

  1. "Enero" es el mes texto completo, a fin de utilizar el patrón MMMM para ello
  2. "2" es el corto mes-día-de, a fin de utilizar el patrón d por ello.
  3. "2010" es el año de 4 dígitos, a fin de utilizar el patrón yyyy por ello.

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010

Tenga en cuenta la importancia del argumento Locale explícita. Si se omite, entonces se usará la locale por defecto que no es necesariamente Inglés como se utiliza en el nombre del mes de la cadena de entrada. Si el entorno local no coincide con la cadena de entrada, entonces confusamente conseguiría un java.text.ParseException a pesar de que cuando el patrón de formato parece válido.

Aquí está un extracto de relevancia de el Javadoc , mostrando todos los modelos de formato disponibles:

Letter  Date or Time Component  Presentation        Examples
------  ----------------------  ------------------  -------------------------------------
G       Era designator          Text                AD
y       Year                    Year                1996; 96
Y       Week year               Year                2009; 09
M/L     Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
u       Day number of week      Number              1
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800
X       Time zone               ISO 8601 time zone  -08; -0800; -08:00

Tenga en cuenta que los patrones son mayúsculas y minúsculas y que los patrones basados ??en texto de cuatro caracteres o más representan la forma completa; de lo contrario una forma corta o abreviada se utiliza si está disponible. Así, por ejemplo, MMMMM o más es innecesario.

Estos son algunos ejemplos de patrones SimpleDateFormat válidas para analizar una cadena dada hasta la fecha:

Input string                            Pattern
------------------------------------    ----------------------------
2001.07.04 AD at 12:08:56 PDT           yyyy.MM.dd G 'at' HH:mm:ss z
Wed, Jul 4, '01                         EEE, MMM d, ''yy
12:08 PM                                h:mm a
12 o'clock PM, Pacific Daylight Time    hh 'o''clock' a, zzzz
0:08 PM, PDT                            K:mm a, z
02001.July.04 AD 12:08 PM               yyyyy.MMMM.dd GGG hh:mm aaa
Wed, 4 Jul 2001 12:08:56 -0700          EEE, d MMM yyyy HH:mm:ss Z
010704120856-0700                       yyMMddHHmmssZ
2001-07-04T12:08:56.235-0700            yyyy-MM-dd'T'HH:mm:ss.SSSZ
2001-07-04T12:08:56.235-07:00           yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2001-W27-3                              YYYY-'W'ww-u

Una nota importante es que SimpleDateFormat es no segura hilo. En otras palabras, nunca se debe declarar y asignarlo como una variable estática o una instancia y luego volver a utilizarlo de diferentes métodos / hilos. Debe crear siempre nuevo en el método de ámbito local.


Java 8 actualización

Si le sucede a estar en Java 8 o más reciente, a continuación, utilizar DateTimeFormatter (también aquí, haga clic en el vínculo para ver todos los formateadores predefinidos y los patrones de formato disponibles; el tutorial está disponible aquí ). Esta nueva API se inspira en JodaTime .

String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02

Nota: si su patrón de formato pasa a contener la pieza del tiempo, así, a continuación, utilizar LocalDateTime#parse(text, formatter) en lugar de LocalDate#parse(text, formatter) . Y, si su patrón de formato pasa a contener el huso horario, así, a continuación, utilizar ZonedDateTime#parse(text, formatter) su lugar.

He aquí un extracto de la relevancia de el Javadoc , enumerando todos los modelos de formato disponibles:

Symbol  Meaning                     Presentation  Examples
------  --------------------------  ------------  ----------------------------------------------
G       era                         text          AD; Anno Domini; A
u       year                        year          2004; 04
y       year-of-era                 year          2004; 04
D       day-of-year                 number        189
M/L     month-of-year               number/text   7; 07; Jul; July; J
d       day-of-month                number        10

Q/q     quarter-of-year             number/text   3; 03; Q3; 3rd quarter
Y       week-based-year             year          1996; 96
w       week-of-week-based-year     number        27
W       week-of-month               number        4
E       day-of-week                 text          Tue; Tuesday; T
e/c     localized day-of-week       number/text   2; 02; Tue; Tuesday; T
F       week-of-month               number        3

a       am-pm-of-day                text          PM
h       clock-hour-of-am-pm (1-12)  number        12
K       hour-of-am-pm (0-11)        number        0
k       clock-hour-of-am-pm (1-24)  number        0

H       hour-of-day (0-23)          number        0
m       minute-of-hour              number        30
s       second-of-minute            number        55
S       fraction-of-second          fraction      978
A       milli-of-day                number        1234
n       nano-of-second              number        987654321
N       nano-of-day                 number        1234000000

V       time-zone ID                zone-id       America/Los_Angeles; Z; -08:30
z       time-zone name              zone-name     Pacific Standard Time; PST
O       localized zone-offset       offset-O      GMT+8; GMT+08:00; UTC-08:00;
X       zone-offset 'Z' for zero    offset-X      Z; -08; -0830; -08:30; -083015; -08:30:15;
x       zone-offset                 offset-x      +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z       zone-offset                 offset-Z      +0000; -0800; -08:00;

Ten en cuenta que tiene varias formateadores predefinidos para los patrones más populares. Así que en lugar de, por ejemplo, DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);, se podría utilizar DateTimeFormatter.RFC_1123_DATE_TIME. Esto es posible debido a que son, enel contrario a SimpleDateFormat, hilo de seguridad. Se podría por lo tanto también definir su propio, si es necesario.

En un formato de cadena de entrada en particular, no es necesario utilizar un DateTimeFormatter explícito: un fecha , como 2016-09-26T17: 44: 57Z, se puede analizar directamente con LocalDateTime#parse(text) como ya utiliza el ISO_LOCAL_DATE_TIME formateador. Del mismo modo, LocalDate#parse(text) analiza un fecha ISO sin el componente de tiempo (véase ISO_LOCAL_DATE ), y ZonedDateTime#parse(text) analiza un fecha ISO con un ISO_ZONED_DATE_TIME ).

Otros consejos

Ah, sí la discusión de Java Fecha, otra vez. Para hacer frente a la manipulación fecha utilizamos Fecha , Calendario , GregorianCalendar , y SimpleDateFormat . Por ejemplo, usando su fecha de enero como entrada:

Calendar mydate = new GregorianCalendar();
String mystring = "January 2, 2010";
Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

A continuación, se puede manipular de que con algo como:

Calendar now = Calendar.getInstance();
mydate.set(Calendar.YEAR,2009);
mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
mydate.set(Calendar.DAY_OF_MONTH,25);
mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
// or with one statement
//mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));
String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);

Con Java 8 obtenemos un nuevo Fecha / Hora API ( JSR 310 ).

En la siguiente manera puede ser utilizado para analizar la fecha en Java 8 sin depender de Joda-Time :

 String str = "January 2nd, 2010";

// if we 2nd even we have changed in pattern also it is not working please workout with 2nd 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(str, formatter);

// access date fields
int year = date.getYear(); // 2010
int day = date.getDayOfMonth(); // 2
Month month = date.getMonth(); // JANUARY
int monthAsInt = month.getValue(); // 1

LocalDate es el estándar de Java 8 clase para la representación de una fecha (sin tiempo). Si desea valores de análisis sintáctico que contienen información de fecha y hora que debe usar LocalDateTime . Para valores con zonas horarias utilizan ZonedDateTime . Tanto proporcionar un método parse() similar a LocalDate:

LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter);
ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);

La lista de caracteres de formato de DateTimeFormatter Javadoc :

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. 
The following pattern letters are defined:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
 G       era                         text              AD; Anno Domini; A
 u       year                        year              2004; 04
 y       year-of-era                 year              2004; 04
 D       day-of-year                 number            189
 M/L     month-of-year               number/text       7; 07; Jul; July; J
 d       day-of-month                number            10

 Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
 Y       week-based-year             year              1996; 96
 w       week-of-week-based-year     number            27
 W       week-of-month               number            4
 E       day-of-week                 text              Tue; Tuesday; T
 e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
 F       week-of-month               number            3

 a       am-pm-of-day                text              PM
 h       clock-hour-of-am-pm (1-12)  number            12
 K       hour-of-am-pm (0-11)        number            0
 k       clock-hour-of-am-pm (1-24)  number            0

 H       hour-of-day (0-23)          number            0
 m       minute-of-hour              number            30
 s       second-of-minute            number            55
 S       fraction-of-second          fraction          978
 A       milli-of-day                number            1234
 n       nano-of-second              number            987654321
 N       nano-of-day                 number            1234000000

 V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
 z       time-zone name              zone-name         Pacific Standard Time; PST
 O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
 X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
 x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
 Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

Mientras que algunas de las respuestas son técnicamente correctos, no son aconsejables.

  • El java.util.Date y clases Calendario son notoriamente molesto. Debido a defectos en el diseño e implementación, a evitar. Afortunadamente tenemos nuestra elección de otros dos bibliotecas excelentes de fecha y hora:
    • Joda-Time
      abierto populares biblioteca libre de costo fuente se puede utilizar en varias versiones de Java. Hay muchos ejemplos de su uso pueden encontrarse en StackOverflow. Al leer algunos de ellos le ayudará a ponerse al día rápidamente.
    • java.time. * Paquete
      Este nuevo conjunto de clases están inspirados en Joda-Time y definido por JSR 310. estas clases están incorporados en Java 8. un proyecto está en marcha para acondicionarlo estas clases de Java 7, pero que backporting no está respaldado por Oracle.
  • Como Kristopher Johnson observó correctamente en su comentario sobre la cuestión, las otras respuestas ignoran cuestiones vitales de:
    • Hora del día Fecha
      tiene tanto una parte de fecha y una porción de hora del día)
    • Zona horaria Francia El comienzo de un día depende de la zona horaria. Si usted no puede especificar una zona horaria, se aplica la zona horaria predeterminada de la JVM. Eso significa que el comportamiento de su código puede cambiar cuando se ejecuta en otros equipos o con una configuración de zona horaria modificada. Probablemente no es lo que desea.
    • Local
      precisa la redacción de la localización de cómo interpretar las palabras (nombre del mes y del día) encontrados durante el análisis. (La respuesta por BalusC correctamente se encarga de esta.) Además, la configuración regional afecta a la salida de algunos formateadores cuando se genera una representación de cadena su fecha y hora.

Joda-Time

Algunas notas acerca de Joda-Time seguimiento.

Zona horaria

En Joda-Time , un objeto DateTime realmente conoce su propia zona horaria asignada. Esto contrasta la clase java.util.Date que parece para tener una zona de tiempo, pero no lo hace.

Nota En el código de ejemplo a continuación cómo se pasa un objeto de zona horaria en la que el formateador analiza la cadena. Esa zona horaria se utiliza para interpretar que la fecha y hora que ha ocurrido en esa zona horaria. Así que hay que pensar y determinar la zona horaria representada por esa entrada de cadena.

Dado que usted no tiene ninguna porción de tiempo en su cadena de entrada, Joda-Time asigna el primer momento del día de la zona horaria especificada como la hora del día. Por lo general, este medio 00:00:00 pero no siempre, a causa de el horario de verano (DST) u otras anomalías. Por cierto, se puede hacer lo mismo con cualquier instancia DateTime llamando withTimeAtStartOfDay.

Formateador Patrón

Los caracteres utilizados en el patrón de un formateador son similares en Joda-Time a los de java.util.Date/Calendar pero no es exactamente lo mismo. Lea cuidadosamente el documento.

inmutabilidad

Por lo general, utilizar las clases inmutables en Joda-Time. En lugar de modificar un objeto de fecha y hora actuales, que llamamos métodos que crean una nueva instancia fresco basado en el otro objeto con la mayoría de los aspectos copiados excepto cuando se deseaba alteraciones. Un ejemplo es el llamado a withZone en última línea de abajo. inmutabilidad ayuda para hacer Joda-Time muy seguro para subprocesos, y también puede hacer algún trabajo más clara.

Conversión

Se necesitará objetos java.util.Date para su uso con otras clases / marco que no saben acerca de los objetos Joda-Time. Por suerte,es muy fácil de mover hacia atrás y adelante.

Pasar de un objeto java.util.Date (aquí llamado date) a Joda-Time DateTime ...

org.joda.time.DateTime dateTime = new DateTime( date, timeZone );

En la otra dirección desde Joda-Time para un objeto java.util.Date ...

java.util.Date date = dateTime.toDate();

Ejemplo de código

String input = "January 2, 2010";

java.util.Locale locale = java.util.Locale.US;
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale );
DateTime dateTime = formatter.parseDateTime( input );

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );

Cuando se ejecuta ...

dateTime: 2010-01-02T00:00:00.000-10:00
dateTime in UTC/GMT: 2010-01-02T10:00:00.000Z

Si bien en tratar con la clase SimpleDateFormat, es importante recordar que la fecha no es apta para subprocesos y no se puede compartir un solo objeto Date con varios subprocesos.

También hay gran diferencia entre "m" y "M" en el que se utiliza para la pequeña caja minutos y capital caso se utiliza para el mes. Lo mismo con "d" y "D". Esto puede provocar errores sutiles que a menudo se pasa por alto. Ver Javadoc o Guía para convertir la cadena hasta la fecha en Java para más detalles.

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
    date = dateFormat.parse("2013-12-4");
    System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013

    String output = dateFormat.format(date);
    System.out.println(output); // 2013-12-04
} 
catch (ParseException e) {
    e.printStackTrace();
}

Funciona bien para mí.

Además, SimpleDateFormat no está disponible con algunas de las tecnologías del lado del cliente, como GWT .

Es una buena idea para ir a Calendar.getInstance (), y su requerimiento es para comparar dos fechas; ir de fecha larga.

Simples dos formateadores hemos utilizado:

  1. ¿Qué formato de fecha que queremos?
  2. ¿Qué formato de fecha está realmente presente?

analizar la fecha completa al formato de hora:

date="2016-05-06 16:40:32";

public static String setDateParsing(String date) throws ParseException {

    // This is the format date we want
    DateFormat mSDF = new SimpleDateFormat("hh:mm a");

    // This format date is actually present
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm");
    return mSDF.format(formatter.parse(date));
}

Mi programa de pruebas humilde. Yo lo uso para jugar con el formateador y consulta de largas fechas que encuentro en archivos de registro (pero que les ha puesto allí ...).

Mi programa de prueba:

package be.test.package.time;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class TimeWork {

    public static void main(String[] args) {    

        TimeZone timezone = TimeZone.getTimeZone("UTC");

        List<Long> longs = new ArrayList<>();
        List<String> strings = new ArrayList<>();

        //Formatting a date needs a timezone - otherwise the date get formatted to your system time zone.
        //Use 24h format HH. In 12h format hh can be in range 0-11, which makes 12 overflow to 0.
        DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
        formatter.setTimeZone(timezone);

        Date now = new Date();

        //Test dates
        strings.add(formatter.format(now));
        strings.add("01-01-1970 00:00:00.000");
        strings.add("01-01-1970 00:00:01.000");
        strings.add("01-01-1970 00:01:00.000");
        strings.add("01-01-1970 01:00:00.000");
        strings.add("01-01-1970 10:00:00.000");
        strings.add("01-01-1970 12:00:00.000");
        strings.add("01-01-1970 24:00:00.000");
        strings.add("02-01-1970 00:00:00.000");
        strings.add("01-01-1971 00:00:00.000");
        strings.add("01-01-2014 00:00:00.000");
        strings.add("31-12-1969 23:59:59.000");
        strings.add("31-12-1969 23:59:00.000");
        strings.add("31-12-1969 23:00:00.000");

        //Test data
        longs.add(now.getTime());
        longs.add(-1L);
        longs.add(0L); //Long date presentation at - midnight 1/1/1970 UTC - The timezone is important!
        longs.add(1L);
        longs.add(1000L);
        longs.add(60000L);
        longs.add(3600000L);
        longs.add(36000000L);
        longs.add(43200000L);
        longs.add(86400000L);
        longs.add(31536000000L);
        longs.add(1388534400000L);
        longs.add(7260000L);
        longs.add(1417706084037L);
        longs.add(-7260000L);

        System.out.println("===== String to long =====");

        //Show the long value of the date
        for (String string: strings) {
            try {
                Date date = formatter.parse(string);
                System.out.println("Formated date : " + string + " = Long = " + date.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        System.out.println("===== Long to String =====");

        //Show the date behind the long
        for (Long lo : longs) {
            Date date = new Date(lo);
            String string = formatter.format(date);
            System.out.println("Formated date : " + string + " = Long = " + lo);        
        }
    }
}

Resultados de la prueba:

===== String to long =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 01-01-1970 24:00:00.000 = Long = 86400000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 31-12-1969 23:59:59.000 = Long = -1000
Formated date : 31-12-1969 23:59:00.000 = Long = -60000
Formated date : 31-12-1969 23:00:00.000 = Long = -3600000
===== Long to String =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 31-12-1969 23:59:59.999 = Long = -1
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:00.001 = Long = 1
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 01-01-1970 02:01:00.000 = Long = 7260000
Formated date : 04-12-2014 15:14:44.037 = Long = 1417706084037
Formated date : 31-12-1969 21:59:00.000 = Long = -7260000

Puede utilizar SimpleDateFormat para la cadena de cambio hasta la fecha

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2000-01-01";
Date date = new Date(sdf.parse(strDate).getTime());

Enlace

Android

Calendar.getInstance (). GetTime () da

Thu Jul 26 15:54:13 GMT+05:30 2018

Uso

String oldDate = "Thu Jul 26 15:54:13 GMT+05:30 2018";
DateFormat format = new SimpleDateFormat("EEE LLL dd HH:mm:ss Z yyyy");
Date updateLast = format.parse(oldDate);

Probar

String date = get_pump_data.getString("bond_end_date");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date datee = (Date)format.parse(date);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top