Como converter uma string Date em longos milésimos de segundo

86

Eu tenho uma data dentro de uma string, algo como "12 de dezembro de 2012". Como posso converter isso em milissegundos (longo)?

Dawood Ahmed
fonte

Respostas:

151

Usando SimpleDateFormat

String string_date = "12-December-2012";

SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
try {
    Date d = f.parse(string_date);
    long milliseconds = d.getTime();
} catch (ParseException e) {
    e.printStackTrace();
}
Jon Lin
fonte
16
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
Ram Kiran
fonte
11

É hora de alguém dar uma resposta moderna a essa pergunta. Em 2012, quando a pergunta foi feita, as respostas postadas também eram boas. Por que as respostas postadas em 2016 também usam as aulas há muito desatualizadas SimpleDateFormate Dateé um pouco mais um mistério para mim. java.time, a moderna API Java de data e hora, também conhecida como JSR-310, é muito mais agradável de se trabalhar. Você pode usá-lo no Android através do ThreeTenABP, veja esta pergunta: Como usar o ThreeTenABP no Projeto Android .

Para a maioria dos propósitos, eu recomendo usar os milissegundos desde a época no início do dia em UTC . Para obter estes:

    DateTimeFormatter dateFormatter
            = DateTimeFormatter.ofPattern("d-MMMM-uuuu", Locale.ENGLISH);
    String stringDate = "12-December-2012";
    long millisecondsSinceEpoch = LocalDate.parse(stringDate, dateFormatter)
            .atStartOfDay(ZoneOffset.UTC)
            .toInstant()
            .toEpochMilli();
    System.out.println(millisecondsSinceEpoch);

Isso imprime:

1355270400000

Se você precisar da hora no início do dia em algum fuso horário específico, especifique esse fuso horário em vez de UTC, por exemplo:

            .atStartOfDay(ZoneId.of("Asia/Karachi"))

Como esperado, isso dá um resultado ligeiramente diferente:

1355252400000

Outro ponto a ser observado, lembre-se de fornecer uma localidade ao seu DateTimeFormatter. Considerei dezembro como sendo o inglês. Existem outros idiomas em que esse mês é chamado da mesma forma, então, escolha o local apropriado. Se você não forneceu uma localidade, o formatador usaria a configuração de localidade da JVM, que pode funcionar em muitos casos, e depois falhar inesperadamente um dia quando você executar seu aplicativo em um dispositivo com uma configuração de localidade diferente.

Ole VV
fonte
9

Dê uma olhada na SimpleDateFormatclasse que pode analisar a Stringe retornar a Datee o getTimemétodo da Dateclasse.

Averróis
fonte
7
  • Primeiro converta a string para java.util.Dateusar o formatador de data
  • Use getTime () para obter a contagem de milissegundos a partir da data
Dmitriy Tarasov
fonte
3

você pode usar o simpleDateFormat para analisar a data da string.

XepterX
fonte
1

A maneira mais fácil é usar Date Using Date () e getTime ()

    Date dte=new Date();
    long milliSeconds = dte.getTime();
    String strLong = Long.toString(milliSeconds);
    System.out.println(milliSeconds)
Saranga kapilarathna
fonte
1

usando simpledateformat, você pode obtê-lo facilmente.

1) Primeiro, converta string para java.Date usando simpledateformatter.

2) Use o método getTime para obter a contagem de milissegundos a partir da data

 public class test {
      public static void main(String[] args) {
      String currentDate = "01-March-2016";
      SimpleDateFormat f = new SimpleDateFormat("dd-MMM-yyyy");
     Date parseDate = f.parse(currentDate);
     long milliseconds = parseDate.getTime();
  }
        }

mais Exemplo clique aqui

Ankit jain
fonte
0

Experimente o código abaixo

        SimpleDateFormat f = new SimpleDateFormat("your_string_format", Locale.getDefault());
        Date d = null;
        try {
            d = f.parse(date);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        long timeInMillis = d.getTime();
subrahmanyam boyapati
fonte