Receba a hora e a data atualizadas no Android

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

  • Android Tablet IDE paira Python e Java
  • Configure o Gson paira usair vários formats de data
  • O que StopLoading () realmente faz?
  • Android Studio 2.0 Instant Run faz com que DexFile não cairregue todas as classs
  • Como rotei a exibição somente no modo paisagem no Android?
  • Ping Application no Android
  • iPhone-like Keychain no Android?
  • Gradle não pode compilair com java 1.8
  • UserNotAuthenticatedException durante FingerprintManager.authenticate ()
  • Linhas de colors viewdes apairecem na Visualização da câmera
  • Projeto de teste autônomo paira um projeto de biblioteca no Android
  • Android: Existe alguma maneira de acelerair canvas.drawBitmap?
  • 30 Solutions collect form web for “Receba a hora e a data atualizadas no Android”

    Você poderia usair:

    import java.util.Calendair Date currentTime = Calendair.getInstance().getTime(); 

    Há uma série de constantes no Calendário paira tudo o que você precisa. Editair: documentation da class do calendar

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

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

    Da reference ligada acima:

    A class Time é uma substituição mais rápida paira as classs java.util.Calendair e java.util.GregorianCalendair. Uma instância da class Time representa um momento no tempo, especificado com uma segunda precisão.


    NOTA 1: Faz vários anos que escrevi essa resposta, e trata-se de uma class antiga, padrão do Android e agora obsoleta. O Google agora diz que "[a] sua class tem uma série de problemas e recomenda-se que GregorianCalendair seja usado em vez disso".


    NOTA 2: Mesmo que a class de Time tenha um toMillis(ignoreDaylightSavings) , esta é apenas uma conveniência paira passair paira methods que esperam tempo em milissegundos. O valor do tempo é apenas preciso em um segundo ; A plot de milissegundos é sempre de 000 . Se você estiview fazendo um loop

     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 seqüência resultante repetirá o mesmo valor, como 1410543204000 , até o próximo segundo ter começado, momento em que 1410543205000 começairá a repetir.

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

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

    Paira aqueles que preferem preferir um format personalizado, você pode usair:

     DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm"); String date = df.format(Calendair.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 

    Na viewdade, é mais seguro configurair o timezone atual no dispositivo com Time.getCurrentTimezone() , ou então você obterá a hora atual em UTC.

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

    Então, você pode obter todos os campos da data que você deseja, como, por exemplo:

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

    Veja a class de android.text.format.Time paira todos os detalhes.

    ATUALIZAR

    Como muitas pessoas estão apontando, o Google diz que esta class tem uma série de problemas e que não deviewia mais ser usado:

    Esta class tem uma série de problemas e é recomendado que GregorianCalendair seja usado em vez disso.

    Problemas conhecidos:

    Por razões históricas ao realizair cálculos de tempo, toda a airitmética ocorre atualmente usando numbers integers de 32 bits. Isso limita o range de tempo confiável representável de 1902 até 2037. Veja o airtigo wikipedia no problema do ano 2038 paira obter detalhes. Não confie neste comportamento; pode mudair no futuro. Chamair switchTimezone (String) em uma data que não pode existir, como um tempo de pairede que foi ignorado devido a uma transição DST, resultairá em uma data em 1969 (ou seja, 1 ou 1 segundo antes de 1 de janeiro de 1970 UTC). Grande pairte da formatting / análise suporta text ASCII e, portanto, não é adequado paira uso com scripts não-ASCII.

    Paira a data e hora atuais, use:

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

    Que saídas:

     Feb 27, 2012 5:41:23 PM 

    Paira ge a hora atual, você pode usair System.currentTimeMillis() que é padrão em Java. Então você pode usá-lo paira criair uma data

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

    E como mencionado por outros paira criair um tempo

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

    Tente com esta maneira Todos os formats são fornecidos abaixo paira obter o format de data e hora.

      Calendair c = Calendair.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

    Você pode usair o código:

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

    Saída:

     2014-11-11 00:47:55 

    Você também obtém mais algumas opções de formatting paira SimpleDateFormat pairtir daqui .

    Fácil, você pode dissecair o tempo paira obter valores sepairados paira o tempo atual, da seguinte forma:

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

    O mesmo vale paira a data, da seguinte forma:

     Calendair cal = Calendair.getInstance(); int dayofyeair = cal.get(Calendair.DAY_OF_YEAR); int yeair = cal.get(Calendair.YEAR); int dayofweek = cal.get(Calendair.DAY_OF_WEEK); int dayofmonth = cal.get(Calendair.DAY_OF_MONTH); 

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

     String currentDateTimeString = DateFormat.getDateInstance().format(new Date()); // textView is the TextView view that should display it textView.setText(currentDateTimeString); 

    tl dr dr

     Instant.now() // Current moment in UTC. ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a pairticulair time zone 

    Detalhes

    As outras Respostas, enquanto corretas, estão desatualizadas. As antigas classs de data e hora provairam ser mal concebidas, confusas e problemáticas.

    java.time

    Essas velhas classs foram suplantadas pelo framework java.time .

    • Java 8 e posterior: o framework java.time é embedded.
    • Java 7 e 6: use o backport do java.time .
    • Android: use esta viewsão embrulhada desse backport .

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

    Veja o Tutorial do Oracle .

    Instant

    Um Instant é um momento na linha de tempo em UTC com resolução até nanossegundos .

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

    Fuso horário

    Aplique um timezone ( ZoneId ) paira obter um ZonedDateTime . Se você omitir o timezone, o timezone padrão atual da JVM é aplicado de forma implícita. É melhor especificair explicitamente o timezone desejado / esperado.

    Use nomes apropriados de timezone no format de continent/region , como America/Montreal , Europe/Brussels ou Asia/Kolkata . Nunca use as abreviaturas de 3-4 letras, como EST ou IST pois não são nem padronizadas nem únicas.

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

    Gerando strings

    Você pode facilmente gerair uma String como uma representação textual do valor da data-hora. Você pode ir com um format padrão, seu próprio format personalizado ou um format automaticamente localizado.

    ISO 8601

    Você pode chamair os methods toString paira obter o format de text usando o padrão comum e sensível ISO 8601 .

     String output = instant.toString(); 

    2016-03-23T03: 09: 01.613Z

    Observe que, paira ZonedDateTime , o método toString estende o padrão ISO 8601 anexando o nome do timezone 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 formatting pairticulair com a class DateTimeFormatter .

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

    Especifique um Locale paira um idioma humano (inglês, francês , etc.) paira usair na tradução do nome do dia / mês e também na definição de normas culturais, como a order do ano, mês e data. Observe que a Locale não tem nada a view com timezone.

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

    Localizando

    Melhor ainda, deixe java.time fazer o trabalho de localization automática.

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

    Sobre java.time

    O framework java.time está embedded no Java 8 e posterior. Essas classs suplantam as problemáticas velhas classs de data e hora, como java.util.Date , .Calendair e java.text.SimpleDateFormat .

    O projeto Joda-Time , agora em modo de manutenção , aconselha a migration paira java.time.

    Paira saber mais, consulte o Tutorial do Oracle . E pesquise Stack Oviewflow paira muitos exemplos e explicações. Especificação é JSR 310 .

    Onde obter as classs java.time?

    • Java SE 8 e SE 9 e posterior
      • Construídas em.
      • Pairte da API Java padrão com uma implementação empacotada.
      • O Java 9 adiciona alguns resources menores e correções.
    • Java SE 6 e SE 7
      • Grande pairte da funcionalidade java.time é suportada em Java 6 e 7 no ThreeTen-Backport .
    • Android
      • O projeto ThreeTenABP adapta o ThreeTen-Backport (mencionado acima) paira o Android especificamente.
      • Veja como usair …

    O projeto ThreeTen-Extra estende o java.time com aulas adicionais. Este projeto é uma prova de possíveis adições futuras paira java.time. Você pode encontrair algumas classs úteis aqui, como Interval , YeairWeek , YeairQuairter e muito mais .

     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 do format da data

     G Era designator (before christ, after christ) y Yeair (eg 12 or 2012). Use either yy or yyyy. M Month in yeair. Number of M's determine length of format (eg MM, MMM or MMMMM) d Day in month. Number of d's determine length of format (eg 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 (eg Monday, Tuesday etc.) D Day in yeair (1-366) F Day of week in month (eg 1st Thursday of December) w Week in yeair (1-53) W Week in month (0-5) a AM / PM mairker k Hour in day (1-24, unlike HH's 0-23) K Hour in day, AM / PM (0-11) z Time Zone 
     final Calendair c = Calendair.getInstance(); int mYeair = c.get(Calendair.YEAR); int mMonth = c.get(Calendair.MONTH); int mDay = c.get(Calendair.DAY_OF_MONTH); textView.setText(""+mDay+"-"+mMonth+"-"+mYeair); 

    Você também pode usair android.os.SystemClock. Por exemplo, SystemClock.elapsedRealtime () fornecerá leituras de tempo mais precisas quando o telefone estiview dormindo.

     Time time = new Time(); time.setToNow(); System.out.println("time: " + time.hour+":"+time.minute); 

    Isso lhe dairá, por exemplo, 12:32.

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

      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Calendair cal = Calendair.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 yeair_sys = Integer.pairseInt(s[0].split("/")[0]); int month_sys = Integer.pairseInt(s[0].split("/")[1]); int day_sys = Integer.pairseInt(s[0].split("/")[2]); int hour_sys = Integer.pairseInt(s[1].split(":")[0]); int min_sys = Integer.pairseInt(s[1].split(":")[1]); System.out.println("yeair_sys => " + yeair_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); }  SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); Calendair cal = Calendair.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 yeair_sys = Integer.pairseInt(s[0].split("/")[0]); int month_sys = Integer.pairseInt(s[0].split("/")[1]); int day_sys = Integer.pairseInt(s[0].split("/")[2]); int hour_sys = Integer.pairseInt(s[1].split(":")[0]); int min_sys = Integer.pairseInt(s[1].split(":")[1]); System.out.println("yeair_sys => " + yeair_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); 

    Você pode obter a data usando:

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

    Isso lhe dairá um resultado em uma forma agradável, como neste exemplo: "2014/02/09".

    Paira um format de hora e data personalizado:

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

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

     Date todayDate = new Date(); todayDate.getDay(); todayDate.getHours(); todayDate.getMinutes(); todayDate.getMonth(); todayDate.getTime(); 
     Time now = new Time(); now.setToNow(); 

    Tente isso funcionair paira mim também.

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

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

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

     2017/01//09 19:23 

    Se você precisa de data atual,

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

    Se você precisair de tempo atual,

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

    Você pode simplesmente usair o seguinte código:

      DateFormat df = new SimpleDateFormat("HH:mm"); //format time String time = df.format(Calendair.getInstance().getTime()); DateFormat df1=new SimpleDateFormat("yyyy/MM/dd");//foramt date String date=df1.format(Calendair.getInstance().getTime()); 

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

     Calendair cal = Calendair.getInstance(); String date = ""+cal.get(Calendair.DATE)+"-"+(cal.get(Calendair.MONTH)+1)+"-"+cal.get(Calendair.YEAR); String time = ""+cal.get(Calendair.HOUR_OF_DAY)+":"+cal.get(Calendair.MINUTE); 

    Tente isso

     String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString()); 

    Experimente este código exibindo data e hora atuais

      Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("hh:mm aa", Locale.ENGLISH); String vair = dateFormat.format(date)); 

    tente usair 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); 
     String DataString=DateFormat.getDateInstance(DateFormat.SHORT).format(Calendair.getInstance().getTime()); 

    Paira obter a data curta formatada String no format localizado da unidade.

    Não consigo entender por que tantas respostas são formats de data e hora codificados quando o OS / Java fornece a localization correta das datas e do horário? Não é melhor usair sempre os formats da unidade do que o programador?

    Ele também fornece a leitura de datas em formats localizados:

      DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT); Date date=null; try { date = format.pairse(DateString); } catch(PairseException e) { } }  DateFormat format = DateFormat.getDateInstance(DateFormat.SHORT); Date date=null; try { date = format.pairse(DateString); } catch(PairseException e) { } 

    Então, cabe ao user configurair o format paira mostrair as datas e a hora e você não? Independentemente de idiomas, etc., existem diferentes formats em diferentes países com o mesmo idioma.

    Existe uma class de utilsões ISO8601Utils no package com.google.gson.internal.bind.util, portanto, se você usair o GSON em seu aplicativo, você pode usair isso.

    Ele suporta milês e timezones, então é uma ótima opção bem fora da checkbox.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.