Como obter data e hora atuais no Android

1109

Como posso obter a hora e a data atuais em um aplicativo Android?

M7M
fonte
3
43 respostas! Enquanto muitos deles eram bons quando foram escritos, a boa resposta a ser usada em 2018 está aqui .
Ole VV

Respostas:

1310

Você poderia usar:

import java.util.Calendar

Date currentTime = Calendar.getInstance().getTime();

Há muitas constantes no Calendário para tudo o que você precisa.

Editar:
verificar a documentação da classe Calendário

miken32
fonte
14
+1 Isso foi muito útil. Sendo novo, são todos esses pequenos detalhes que precisamos ... Estou usando o Google Agenda para obter a data juliana. Muito mais fácil do que obter milissegundos e descobrir se o valor é igual a hoje;)
Bill Mote
9
Mas de onde isso tira a data e a hora? o dispositivo android se definindo?
Kyle Clegg
12
@Kyle Sim, é baseado nas configurações de hora do dispositivo / fuso horário. Cite o documento : "O método getInstance do calendário retorna um calendário cuja localidade é baseada nas configurações do sistema e cujos campos de hora foram inicializados com a data e hora atuais" - (acima da primeira linha de código de amostra na documentação da classe).
3
+1 nesta solução tem precisão de milissegundos, exatamente o que eu precisava.
Igor Zelaya
42
Como o @adamdport diz, isso realmente não responde à pergunta ... Calendar.getInstance().getTime()ou Calendar.getInstance().getTimeInMillis()funcionará.
Akousmata
487

Você pode ( mas não deve mais - veja abaixo!) Usar android.text.format.Time :

Time now = new Time();
now.setToNow();

A partir da referência vinculada acima:

A classe Time é um substituto mais rápido para as classes java.util.Calendar e java.util.GregorianCalendar. Uma instância da classe Time representa um momento no tempo, especificado com segunda precisão.


NOTA 1: Faz vários anos que escrevi esta resposta e trata-se de uma classe antiga, específica para Android e agora obsoleta. O Google agora diz que "[sua classe tem vários problemas e é recomendável que o GregorianCalendar seja usado" ".


NOTA 2: Embora a Timeclasse tenha um toMillis(ignoreDaylightSavings)método, é apenas uma conveniência passar para métodos que esperam tempo em milissegundos. O valor do tempo é preciso apenas para um segundo ; a parte de milissegundos é sempre 000. Se em um loop você faz

Time time = new Time();   time.setToNow();
Log.d("TIME TEST", Long.toString(time.toMillis(false)));
... do something that takes more than one millisecond, but less than one second ...

A sequência resultante repetirá o mesmo valor, como 1410543204000, até o início do próximo segundo, momento em que 1410543205000começará a repetir.

Thomas Padron-McCarthy
fonte
2
@InsanityOnABun e Muhammad Babar. Não não não. Os médicos dizem que "especificado com segunda precisão" Mesmo o teste mais simples (obter o tempo atual em um loop, para Millis e registrar / imprimir o resultado) teria mostrado que o tempo resultante tem 000 como a parte de milissegundos!
Página
3
@IgorZelaya Se você deseja precisão de milissegundos, provavelmente está fazendo um intervalo de tempo , em vez da hora do dia. Os documentos do Android recomendam o SystemClock.uptimeMillis()tempo de intervalo. Como é isso que a maioria das funções internas usa, há uma forte motivação para que ela seja bem implementada em todos os dispositivos. Consulte a discussão no SystemClock ... Se você deseja correlacionar isso com a hora do dia, no onResume do aplicativo, leia isso e Time / setToNow / toMillis. Lembre-se da diferença entre eles.
Página
Não use a classe Time . Ele será removido no futuro e tem muitos problemas.
Sandy Chapman
1
> Esta classe foi descontinuada no nível 22 da API. Use GregorianCalendar. Veja aqui
Neo
Na verdade, GregorianCalendarfoi suplantado anos atrás em Java e mais tarde no Android pelas classes java.time , especificamente ZonedDateTime. Para o Android anterior, consulte os projetos ThreeTen-Backport e ThreeTenABP .
Basil Bourque
367

Se você deseja obter a data e a hora em um padrão específico, pode usar o seguinte:

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());

Ou,

Data :

String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());

Tempo:

String currentTime = new SimpleDateFormat("HH:mm:ss", Locale.getDefault()).format(new Date());
Miciurash
fonte
Isso fornecerá o horário no UTC, que deve adotar nos fusos horários.
Andras Balázs Lajtha
10
Cuidado, SimpleDateFormat pode ser problemático se o desempenho for um problema. No meu aplicativo, eu tinha uma exibição personalizada com cerca de 20 rótulos HH: MM que representavam tempos específicos (números inteiros longos mantendo milissegundos) e um número igual de recursos desenháveis. Os testes iniciais mostraram que a interação não era tão fluida quanto eu queria. Ao criar um perfil no onDraw (), descobri que as chamadas SimpleTimeFormatter demoravam 80% do tempo. Na verdade, eu estou lendo esta página, como parte de uma busca por um formatador mais eficiente e para saber mais sobre calendários, etc.
William T. Mallard
3
Sim, mas não mais. Não percebi a sobrecarga envolvida e assumi que era praticamente um POJO.
William T. Mallard
32
Resumindo:String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Pratik Butani
4
você pode inserir sdf.setTimeZone(TimeZone.getDefault())no meio
Harvey
231

Para aqueles que preferem um formato personalizado, você pode usar:

DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());

Considerando que você pode ter padrões DateFormat, como:

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
ANemati
fonte
126

Na verdade, é mais seguro definir o fuso horário atual definido no dispositivo com Time.getCurrentTimezone(), ou você receberá a hora atual no UTC.

Time today = new Time(Time.getCurrentTimezone());
today.setToNow();

Em seguida, você pode obter todos os campos de data que desejar, como, por exemplo:

textViewDay.setText(today.monthDay + "");             // Day of the month (1-31)
textViewMonth.setText(today.month + "");              // Month (0-11)
textViewYear.setText(today.year + "");                // Year 
textViewTime.setText(today.format("%k:%M:%S"));  // Current time

Consulte a classe android.text.format.Time para obter todos os detalhes.

ATUALIZAR

Como muitas pessoas apontam, o Google diz que essa classe tem vários problemas e não deve mais ser usada:

Esta classe tem vários problemas e é recomendável que GregorianCalendar seja usado.

Problemas conhecidos:

Por razões históricas, ao executar cálculos de tempo, toda a aritmética ocorre atualmente usando números inteiros de 32 bits. Isso limita o intervalo de tempo confiável representável de 1902 a 2037. Consulte o artigo da Wikipedia sobre o problema do ano 2038 para obter detalhes. Não confie nesse comportamento; isso pode mudar no futuro. Chamar switchTimezone (String) em uma data que não pode existir, como uma hora da parede que foi ignorada devido a uma transição do horário de verão, resultará em uma data em 1969 (ou seja, -1 ou 1 segundo antes de 1º de janeiro de 1970, UTC). Grande parte da formatação / análise assume texto ASCII e, portanto, não é adequado para uso com scripts não ASCII.

Kaneda
fonte
O tempo deve ser importado de qual pacote?
ManishSB
Esta classe foi descontinuada no nível 22 da API. Podemos usar o GregorianCalendar.
amigos estão dizendo sobre choletski
78

Para a data e hora atuais, use:

String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());

Quais saídas:

Feb 27, 2012 5:41:23 PM
Kirit
fonte
Eu tenho a data atual, dia e hora do sistema, mas o tempo não está mudando. eu quero aumentar o tempo segundos por segundos. Como posso fazer?
Bhavesh Hirpara 01/10/12
2
Esta é a maneira recomendada de fazer isso, de acordo com a API do Android: developer.android.com/reference/java/text/… Obrigado!
M Granja
58

Tente dessa maneira Todos os formatos são fornecidos abaixo para obter o formato de data e hora.

    Calendar c = Calendar.getInstance();
    SimpleDateFormat dateformat = new SimpleDateFormat("dd-MMM-yyyy hh:mm:ss aa");
    String datetime = dateformat.format(c.getTime());
    System.out.println(datetime);

primeiro

segundo terceiro

Amitsharma
fonte
53

tl; dr

Instant.now()  // Current moment in UTC.

…ou…

ZonedDateTime.now( ZoneId.of( "America/Montreal" ) )  // In a particular time zone

Detalhes

As outras respostas, enquanto corretas, estão desatualizadas. As antigas aulas de data e hora provaram ser mal projetadas, confusas e problemáticas.

java.time

Essas classes antigas foram substituídas pela estrutura java.time .

Essas novas classes são inspiradas no altamente bem - sucedido projeto Joda-Time , definido pelo JSR 310 e estendido pelo projeto ThreeTen-Extra .

Veja o Tutorial do Oracle .

Instant

An Instanté um momento na linha do tempo no UTC com resolução de até nanossegundos .

 Instant instant = Instant.now(); // Current moment in UTC.

Fuso horário

Aplique um fuso horário ( ZoneId) para obter a ZonedDateTime. Se você omitir o fuso horário, o fuso horário padrão atual da JVM será aplicado implicitamente. Melhor especificar explicitamente o fuso horário desejado / esperado.

Use nomes fuso horário correto no formato de continent/regioncomo America/Montreal, Europe/Brusselsou Asia/Kolkata. Nunca use os 3-4 carta abreviaturas tais como ESTou ISTcomo eles não são nem padronizados nem único.

ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );

Tabela de tipos de data e hora em Java, modernos e herdados

Gerando strings

Você pode facilmente gerar a Stringcomo uma representação textual do valor de data e hora. Você pode optar por um formato padrão, seu próprio formato personalizado ou um formato localizado automaticamente.

ISO 8601

Você pode chamar os toStringmétodos para obter o texto formatado usando o padrão ISO 8601 comum e sensato .

String output = instant.toString();

2016-03-23T03: 09: 01.613Z

Observe que ZonedDateTime, para , o toStringmétodo estende o padrão ISO 8601 acrescentando o nome do fuso horário entre colchetes. Informações extremamente úteis e importantes, mas não padrão.

2016-03-22T20: 09: 01.613-08: 00 [America / Los_Angeles]

Formato personalizado

Ou especifique seu próprio padrão de formatação específico com a DateTimeFormatterclasse.

DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );

Especifique a Localepara um idioma humano (inglês, francês etc.) a ser usado na tradução do nome do dia / mês e também na definição de normas culturais, como a ordem do ano, o mês e a data. Observe que Localenão tem nada a ver com fuso horário.

formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );

Localizando

Melhor ainda, deixe o java.time fazer o trabalho de localização automaticamente.

DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) );  // Or Locale.CANADA_FRENCH and so on.

Sobre java.time

A estrutura java.time é integrada ao Java 8 e posterior. Essas classes suplantar os velhos problemáticos legados aulas de data e hora, como java.util.Date, Calendar, e SimpleDateFormat.

O projeto Joda-Time , agora em modo de manutenção , aconselha a migração para o java.time classes .

Para saber mais, consulte o Tutorial do Oracle . E procure Stack Overflow para muitos exemplos e explicações. A especificação é JSR 310 .

Você pode trocar objetos java.time diretamente com seu banco de dados. Use um driver JDBC compatível com JDBC 4.2 ou posterior. Não há necessidade de strings, não há necessidade dejava.sql.* classes.

Onde obter as classes java.time?

  • Java SE 8 , Java SE 9 , Java SE 10 e posterior
    • Construídas em.
    • Parte da API Java padrão com uma implementação em pacote configurável.
    • O Java 9 adiciona alguns recursos e correções menores.
  • Java SE 6 e Java SE 7
    • Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport .
  • Android
    • Versões posteriores das implementações de pacote configurável do Android das classes java.time.
    • Para anteriormente Android (<26), o ThreeTenABP projeto adapta ThreeTen-Backport (mencionados acima). Consulte Como usar o ThreeTenABP… .

Tabela que lista a implementação da tecnologia * java.time * a ser usada em quais versões do Java e Android.

Basil Bourque
fonte
2
@ giraffe.guru Releia minha resposta. Você perdeu a terceira bala. Grande parte da funcionalidade java.time é portada para Java 6 e 7 no ThreeTen-Backport e adaptada ainda mais ao Android no ThreeTenABP .
Basil Bourque
Instant.now()e ZonedDateTime.now()é obrigatório API 26
Ryde
2
@ Ryde Como eu disse a giraffe.guru, releia minha resposta. Procure a terceira bala mencionando "Android".
Basil Bourque
Acredito que você esteja certo: sua nova tabela de edição java.time transmite a mensagem de maneira mais direta e fácil do que uma lista de marcadores. Se fosse eu, acho que complicaria um pouco mais e colocaria uma marca de seleção entre parênteses (ou algo semelhante) em ThreeTenBackport / Java 8+ e também em ThreeTenABP / Android 26+, já que essas combinações funcionam. geralmente não faz sentido usá-los. Aplicativos Android em desenvolvimento que usam o ThreeTenABP e têm como alvo uma variedade de níveis da API do Android acima e abaixo do nível 26. Parece-me que os desenvolvedores escolhem bem nesses casos.
VV Ole Ole
1
@ OleV.V. Obrigado por sugerir uma marca de verificação secundária na tabela gráfica. Eu tenho usado isso em versões posteriores da tabela. Bastante aperfeiçoado.
Basil Bourque
52

Para ge o horário atual, você pode usar o System.currentTimeMillis()que é padrão em Java. Então você pode usá-lo para criar uma data

Date currentDate = new Date(System.currentTimeMillis());

E como mencionado por outros para criar um tempo

Time currentTime = new Time();
currentTime.setToNow();
JosephL
fonte
13
Não há necessidade System.currentTimeMillis(); simplesmente new Date() faz a mesma coisa .
Jonik
@Jonik Cannot resolve constructor Date()no Android, o Android SDK usa uma mistura de Java 6 e 7.
surfer190
1
Obrigado. Date currentDate = new Date(System.currentTimeMillis());está correto
mghhgm 03/03
@mghhgm Não, new Date(System.currentTimeMillis())não está certo: (a) é redundante, pois é exatamente o mesmo que new Date(). (b) A java.util.Dateclasse problemática agora é suplantada pelo java.time.InstantJava 8 e posterior. Portado para Java 6 e 7 no projeto ThreeTen-Backport e para Android anterior (<26) no ThreeTenABP .
Basil Bourque
37

Você pode usar o código:

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());

Resultado:

2014-11-11 00:47:55

Você também recebe mais algumas opções de formatação a SimpleDateFormatpartir daqui .

Himanshu Aggarwal
fonte
FYI, as problemáticas velhas classes de data e hora, como java.util.Date, java.util.Calendar, ejava.text.SimpleDateFormat estão agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da Oracle .
Basil Bourque
32

Fácil, você pode dissecar o tempo para obter valores separados para o horário atual, da seguinte maneira:

Calendar cal = Calendar.getInstance(); 

  int millisecond = cal.get(Calendar.MILLISECOND);
  int second = cal.get(Calendar.SECOND);
  int minute = cal.get(Calendar.MINUTE);
        //12 hour format
  int hour = cal.get(Calendar.HOUR);
        //24 hour format
  int hourofday = cal.get(Calendar.HOUR_OF_DAY);

O mesmo vale para a data, como segue:

Calendar cal = Calendar.getInstance(); 

  int dayofyear = cal.get(Calendar.DAY_OF_YEAR);
  int year = cal.get(Calendar.YEAR);
  int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
  int dayofmonth = cal.get(Calendar.DAY_OF_MONTH);
SkateJerrySkate
fonte
como obter data para os próximos 5 a 10 dias ... é aqui o cálculo manual?
CoDe
@CoDe Você usa a data para isso
FindOutIslamNow 8/18
27

Existem várias opções, já que o Android é principalmente Java, mas se você deseja escrevê-lo em um textView, o seguinte código faria o truque:

String currentDateTimeString = DateFormat.getDateInstance().format(new Date());

// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
dLobatog
fonte
8
Você deve usar Calendarou GregorianCalendar. A Dateclasse está obsoleta.
21811 Joseph Earl
Graças acasalar :) Eu tinha ideia nenhuma sobre isso
dLobatog
12
De acordo com a documentação de referência Date () ( developer.android.com/reference/java/util/Date.html ), não há nada referente à classe Date () sendo preterida - no entanto, vários métodos e construtores foram preteridos.
Zac Seth
2
Isso produzirá resultado incorreto no sentido das configurações atuais do usuário (formato da hora de 12/24, por exemplo). Use android.text.format.DateFormat.getTimeFormat (contexto de contexto) para obter DateFormat para as configurações atuais do usuário.
2741111
@ Zac você está certo, mesmo o método getTime de Date é ainda mais completo
24
SimpleDateFormat databaseDateTimeFormate = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
SimpleDateFormat databaseDateFormate = new SimpleDateFormat("yyyy-MM-dd");
SimpleDateFormat sdf1 = new SimpleDateFormat("dd.MM.yy");
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy.MM.dd G 'at' hh:mm:ss z");
SimpleDateFormat sdf3 = new SimpleDateFormat("EEE, MMM d, ''yy");
SimpleDateFormat sdf4 = new SimpleDateFormat("h:mm a");
SimpleDateFormat sdf5 = new SimpleDateFormat("h:mm");
SimpleDateFormat sdf6 = new SimpleDateFormat("H:mm:ss:SSS");
SimpleDateFormat sdf7 = new SimpleDateFormat("K:mm a,z");
SimpleDateFormat sdf8 = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa");


String currentDateandTime = databaseDateTimeFormate.format(new Date());     //2009-06-30 08:29:36
String currentDateandTime = databaseDateFormate.format(new Date());     //2009-06-30
String currentDateandTime = sdf1.format(new Date());     //30.06.09
String currentDateandTime = sdf2.format(new Date());     //2009.06.30 AD at 08:29:36 PDT
String currentDateandTime = sdf3.format(new Date());     //Tue, Jun 30, '09
String currentDateandTime = sdf4.format(new Date());     //8:29 PM
String currentDateandTime = sdf5.format(new Date());     //8:29
String currentDateandTime = sdf6.format(new Date());     //8:28:36:249
String currentDateandTime = sdf7.format(new Date());     //8:29 AM,PDT
String currentDateandTime = sdf8.format(new Date());     //2009.June.30 AD 08:29 AM

Padrões de formato de data

G   Era designator (before christ, after christ)
y   Year (e.g. 12 or 2012). Use either yy or yyyy.
M   Month in year. Number of M's determine length of format (e.g. MM, MMM or MMMMM)
d   Day in month. Number of d's determine length of format (e.g. d or dd)
h   Hour of day, 1-12 (AM / PM) (normally hh)
H   Hour of day, 0-23 (normally HH)
m   Minute in hour, 0-59 (normally mm)
s   Second in minute, 0-59 (normally ss)
S   Millisecond in second, 0-999 (normally SSS)
E   Day in week (e.g Monday, Tuesday etc.)
D   Day in year (1-366)
F   Day of week in month (e.g. 1st Thursday of December)
w   Week in year (1-53)
W   Week in month (0-5)
a   AM / PM marker
k   Hour in day (1-24, unlike HH's 0-23)
K   Hour in day, AM / PM (0-11)
z   Time Zone
Vignesh KM
fonte
1
Embora outras respostas estejam corretas também. Gostei desta resposta, pois ajuda também a problemas relacionados ao tempo. Obrigado @Vighnesh KM
Ankit Gupta
17
final Calendar c = Calendar.getInstance();
    int mYear = c.get(Calendar.YEAR);
    int mMonth = c.get(Calendar.MONTH);
    int mDay = c.get(Calendar.DAY_OF_MONTH);

textView.setText(""+mDay+"-"+mMonth+"-"+mYear);
Alex Muriithi
fonte
15

Este é um método que será útil para obter data e hora:

private String getDate(){
    DateFormat dfDate = new SimpleDateFormat("yyyy/MM/dd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    DateFormat dfTime = new SimpleDateFormat("HH:mm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + " " + time;
}

Você pode chamar esse método e obter os valores atuais de data e hora:

2017/01//09 19:23
Jorgesys
fonte
Não gosto do forte acoplamento entre lógica de apresentação e lógica de processo; Eu preferiria um método que apenas faça a formatação e use um parâmetro de entrada de data. Também não entendo por que você está usando 2 SimpleDateFormats e 2 Dates ... você não pode usar apenas "yyyy/MM/dd HH:mm"o formato e o calendário de chamadas uma vez?
AjahnCharles
12
Time time = new Time();
time.setToNow();
System.out.println("time: " + time.hour+":"+time.minute);

Isso fornecerá, por exemplo, 12:32.

Lembre-se de importar android.text.format.Time;

Sam Haque
fonte
12
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();
    System.out.println("time => " + dateFormat.format(cal.getTime()));

    String time_str = dateFormat.format(cal.getTime());

    String[] s = time_str.split(" ");

    for (int i = 0; i < s.length; i++) {
         System.out.println("date  => " + s[i]);
    }

    int year_sys = Integer.parseInt(s[0].split("/")[0]);
    int month_sys = Integer.parseInt(s[0].split("/")[1]);
    int day_sys = Integer.parseInt(s[0].split("/")[2]);

    int hour_sys = Integer.parseInt(s[1].split(":")[0]);
    int min_sys = Integer.parseInt(s[1].split(":")[1]);

    System.out.println("year_sys  => " + year_sys);
    System.out.println("month_sys  => " + month_sys);
    System.out.println("day_sys  => " + day_sys);

    System.out.println("hour_sys  => " + hour_sys);
    System.out.println("min_sys  => " + min_sys);
duggu
fonte
12

Para a data e hora atuais com formato, use

Em Java

Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Log.d("Date","DATE : " + strDate)

Na cidade Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val current = LocalDateTime.now()
    val formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy. HH:mm:ss")
    var myDate: String =  current.format(formatter)
    Log.d("Date","DATE : " + myDate)
} else {
    var date = Date()
    val formatter = SimpleDateFormat("MMM dd yyyy HH:mma")
    val myDate: String = formatter.format(date)
    Log.d("Date","DATE : " + myDate)
}

Padrões do Formatador de Data

"yyyy.MM.dd G 'at' HH:mm:ss z" ---- 2001.07.04 AD at 12:08:56 PDT
"hh 'o''clock' a, zzzz" ----------- 12 o'clock PM, Pacific Daylight Time
"EEE, d MMM yyyy HH:mm:ss Z"------- Wed, 4 Jul 2001 12:08:56 -0700
"yyyy-MM-dd'T'HH:mm:ss.SSSZ"------- 2001-07-04T12:08:56.235-0700
"yyMMddHHmmssZ"-------------------- 010704120856-0700
"K:mm a, z" ----------------------- 0:08 PM, PDT
"h:mm a" -------------------------- 12:08 PM
"EEE, MMM d, ''yy" ---------------- Wed, Jul 4, '01
Vipul Prajapati
fonte
Obrigado por querer colaborar. Você está contribuindo com algo que ainda não está nas 36 respostas anteriores? De qualquer forma, você ainda está usando a SimpleDateFormatclasse notoriamente problemática e desatualizada . Mesmo antes do Oreo, você não precisa, você pode usar o ThreeTenABP , o backport do java.time, a moderna API de data e hora do Java.
VV Ole VV
11

Você também pode usar android.os.SystemClock. Por exemplo, SystemClock.elapsedRealtime () fornecerá leituras de hora mais precisas quando o telefone estiver em suspensão.

Quadroid
fonte
10

Se você precisar da data atual:

Calendar cc = Calendar.getInstance();
int year = cc.get(Calendar.YEAR);
int month = cc.get(Calendar.MONTH);
int mDay = cc.get(Calendar.DAY_OF_MONTH);
System.out.println("Date", year + ":" + month + ":" + mDay);

Se você precisar da hora atual:

 int mHour = cc.get(Calendar.HOUR_OF_DAY);
 int mMinute = cc.get(Calendar.MINUTE);
 System.out.println("time_format" + String.format("%02d:%02d", mHour , mMinute));
RejoylinLokeshwaran
fonte
9

Para um formato de data e hora personalizado:

    SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
    String cDateTime=dateFormat.format(new Date());

A saída é como o formato abaixo: 2015-06-18T10: 15: 56-05: 00

Omar Faroque Anik
fonte
8
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Muhammad Aamir Ali
fonte
8
Time now = new Time();
now.setToNow();

Tente isso funciona para mim também.

O homem
fonte
8

Você pode obter a data usando:

Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");

Isso fornecerá um resultado de uma forma agradável, como neste exemplo: "2014/02/09".

Annabelle
fonte
O construtor sem parâmetros Time t = new Time();usará o fuso horário padrão. Na minha experiência, padrão == atual.
William T. Mallard
7

Bem, eu tive problemas com algumas respostas da API, então fundi esse código, espero que sirva a eles:

    Time t = new Time(Time.getCurrentTimezone());
    t.setToNow();
    String date1 = t.format("%Y/%m/%d");

    Date date = new Date(System.currentTimeMillis());
    SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa",
            Locale.ENGLISH);
    String var = dateFormat.format(date);
    String horafecha = var+ " - " + date1;

    tvTime.setText(horafecha);

Saída: 03:25 PM - 03/10/2017

Charlie
fonte
7

Você pode simplesmente usar o seguinte código:

 DateFormat df = new SimpleDateFormat("HH:mm"); // Format time
 String time = df.format(Calendar.getInstance().getTime());

 DateFormat df1 = new SimpleDateFormat("yyyy/MM/dd"); // Format date
 String date = df1.format(Calendar.getInstance().getTime());
Ali Ziaee
fonte
6

Tente isto

String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
Abhinaw Kumar
fonte
Esta é uma solução perfeita e elegante. Isso é tudo o que é necessário, não soluções desnecessariamente longas, como em outras respostas.
zeeshan
5

O método abaixo retornará a data e hora atuais em String, use fuso horário diferente de acordo com o fuso horário real.

public static String GetToday(){
    Date presentTime_Date = Calendar.getInstance().getTime();
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));
    return dateFormat.format(presentTime_Date);
}
perigo
fonte
4

Você deve usar a classe Calender de acordo com a nova API. A classe de data está obsoleta agora.

Calendar cal = Calendar.getInstance();

String date = ""+cal.get(Calendar.DATE)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.YEAR);

String time = ""+cal.get(Calendar.HOUR_OF_DAY)+":"+cal.get(Calendar.MINUTE);
Akshay Paliwal
fonte
4

Tente usar o código abaixo:

 Date date = new Date();
 SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());  
 String currentDate = dateFormatWithZone.format(date);
Manikandan K
fonte