Eu tenho uma data dentro de uma string, algo como "12 de dezembro de 2012". Como posso converter isso em milissegundos (longo)?
fonte
Eu tenho uma data dentro de uma string, algo como "12 de dezembro de 2012". Como posso converter isso em milissegundos (longo)?
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();
}
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date = (Date)formatter.parse("12-December-2012");
long mills = date.getTime();
É 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 SimpleDateFormat
e 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.
Dê uma olhada na SimpleDateFormat
classe que pode analisar a String
e retornar a Date
e o getTime
método da Date
classe.
java.util.Date
usar o formatador de dataA 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)
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
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();