Como posso obter uma data atual no Android?

165

Eu escrevi o seguinte código

Date d = new Date();
CharSequence s  = DateFormat.format("MMMM d, yyyy ", d.getTime());

Mas está me perguntando parâmetro, eu quero a data atual no formato de string,

gostar

28-Dec-2011

para que eu possa começar TextView,

explique um pouco, se você acha que algo é necessário, eu sou novo no Android Development.

Chatar Veer Suthar
fonte
1
Enquanto o uso da DateFormatclasse era bom quando essa pergunta foi feita em 2011, essa classe e sua subclasse SimpleDateFormatsempre foram problemáticas e agora estão desatualizadas há muito tempo. Eu recomendo que você não os use e, em vez disso, procure java.time, a moderna API de data e hora de Java .
Ole VV

Respostas:

389

Você pode usar a SimpleDateFormatclasse para formatar a data no formato desejado.

Basta verificar este link onde você tem uma ideia para o seu exemplo.

Por exemplo:

String dateStr = "04/05/2010"; 
 
SimpleDateFormat curFormater = new SimpleDateFormat("dd/MM/yyyy"); 
Date dateObj = curFormater.parse(dateStr); 
SimpleDateFormat postFormater = new SimpleDateFormat("MMMM dd, yyyy"); 
 
String newDateStr = postFormater.format(dateObj); 

Atualizar:

O exemplo detalhado está aqui , eu sugiro que você siga este exemplo e entenda o conceito da classe SimpleDateFormat.

Solução final:

Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy", Locale.getDefault());
String formattedDate = df.format(c);
Paresh Mayani
fonte
convém usar o método System.currentTimeMillis () ou a classe Data em vez da classe Calendar. Deve ser mais rápido. stackoverflow.com/questions/368094/...
cjayem13
Isso requer API 24!
ueen
FYI, os terrivelmente problemáticas aulas de data e hora, como java.util.Date, java.util.Calendar, e java.text.SimpleDateFormatsão agora legado , suplantado pelos java.time classes internas em Java 8 e posterior. Consulte o Tutorial da Oracle .
Basil Bourque
@ueen Por favor, importe do pacote java e não do android.
Sadda Hussain
Trabalha multas? Atualmente? (2020)
luke cross
152

Seu código de uma linha simples para obter a Data atual neste formato aaaa-MM-dd , você pode usar o formato que deseja:

String date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date());
Pratik Butani
fonte
7
Você deve alterá-lo para: String currentDate = new SimpleDateFormat ("dd-MM-aaaa", Locale.getDefault ()). Format (new Date ());
Bart Burg
1
Uau, obrigada! Isso funcionou, embora eu acredite ter descoberto por que a data no meu dispositivo virtual estava aparecendo um dia antes, provavelmente porque a data na máquina virtual não estava correta. Quando testado em um telefone real, ele fez maravilhas. Então, obrigado @Pratik
wesley franks
30

Isso não tem nada a ver com o Android, pois é baseado em java, para que você possa usar

private String getDateTime() { 
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   return dateFormat.format(date); 
}
Graham Smith
fonte
Há erros, new Date () está pedindo argumentos, e você está inicializando o DateFormat com SimpleDateFormat, também não é válido
Chatar Veer Suthar
12
 public String giveDate() {
    Calendar cal = Calendar.getInstance();
    SimpleDateFormat sdf = new SimpleDateFormat("EEE, MMM d, yyyy");
    return sdf.format(cal.getTime());
 }
Kamal
fonte
11

tente isso,

SimpleDateFormat timeStampFormat = new SimpleDateFormat("yyyyMMddHHmmssSS");
Date myDate = new Date();
String filename = timeStampFormat.format(myDate);
Lúcifer
fonte
ele está dizendo argumentos Adicionar a new Date (long)
Chatar Veer Suthar
no novo Date (), ele não pode pedir o parâmetro long.
Lucifer
Por que você usa keywork privado, executa seu código no projeto android, você obtém a saída?
Chatar Veer Suthar
por favor remova esse "particular". sim, eu recebo a saída, estou vendo sua discussão. Eu não sei por que você está recebendo problemas por uma cotação muito simples.
Lucifer
7
CharSequence s  = DateFormat.getDateInstance().format("MMMM d, yyyy ");

Você precisa de uma instância primeiro

Marthyn Olthof
fonte
getDateInstance, não reconhecendo isso #
704 Chatar Veer Suthar
se você olhar para os documentos em java, docs.oracle.com/javase/6/docs/api/java/text/… , java.util.Locale)
Marthyn Olthof
@Veer, se você acidentalmente importada android.text.format.DateFormat vez de java.text.DateFormat, getDateInstance () não será reconhecido
gcbound
7

Funciona como um encanto e converte em String como um bônus;)

SimpleDateFormat currentDate = new SimpleDateFormat("dd/MM/yyyy");
      Date todayDate = new Date();
    String thisDate = currentDate.format(todayDate);
SoVinceble
fonte
5
 String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

// importa a classe Date como java.util

arshad shaikh
fonte
4

O código abaixo exibe a hora e a data

Calendar cal = Calendar.getInstance();
cal.getTime().toString();
Rajeswari Kotikalapudi
fonte
4
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String date = df.format(Calendar.getInstance().getTime());
Zeeshan Ali
fonte
4

Eu estou fornecendo a resposta moderna.

java.time e ThreeTenABP

Para obter a data atual:

    LocalDate today = LocalDate.now(ZoneId.of("America/Hermosillo"));

Isso fornece um LocalDateobjeto, que é o que você deve usar para manter uma data em seu programa. A LocalDateé uma data sem hora do dia.

Somente quando você precisar exibir a data para um usuário, formate-a em uma sequência adequada para a localidade do usuário:

    DateTimeFormatter userFormatter
            = DateTimeFormatter.ofLocalizedDate(FormatStyle.LONG);
    System.out.println(today.format(userFormatter));

Quando executei esse trecho hoje no código de idioma inglês dos EUA, a saída era:

13 de julho de 2019

Se você quiser mais curto, especifique FormatStyle.MEDIUMou mesmo FormatStyle.SHORT. DateTimeFormatter.ofLocalizedDateusa o código de idioma de formatação padrão, portanto, o ponto é que ele fornecerá uma saída adequada para esse código de idioma, diferente para códigos de idioma diferentes.

Se seu usuário tiver requisitos muito especiais para o formato de saída, use uma sequência de padrão de formato:

    DateTimeFormatter userFormatter = DateTimeFormatter.ofPattern(
            "d-MMM-u", Locale.forLanguageTag("ar-AE"));

13-junho -2019

Estou usando e recomendando java.time, a moderna API de data e hora de Java. DateFormat, SimpleDateFormat, DateE Calendarusado na pergunta e / ou muitas das outras respostas, são mal concebidos e longo desatualizado. E o java.time é muito mais agradável de se trabalhar.

Pergunta: Posso usar o java.time no Android?

Sim, o java.time funciona bem em dispositivos Android mais antigos e mais recentes. Requer apenas pelo menos Java 6 .

  • No Java 8 e posterior e em dispositivos Android mais recentes (do nível 26 da API), a API moderna é incorporada.
  • No Java 6 e 7, obtenha o ThreeTen Backport, o backport das classes modernas (ThreeTen para JSR 310; veja os links na parte inferior).
  • No Android (mais antigo), use a edição Android do ThreeTen Backport. Chama-se ThreeTenABP. E certifique-se de importar as classes de data e hora org.threeten.bpcom subpacotes.

Ligações

Ole VV
fonte
Resposta muito boa! Mas como posso converter ThreeTen LocalDateTime para Date? Estou usando o Firebase, e um pré-requisito para salvar o registro de data e hora é o objeto Date.
H.Karatsanov 03/07
@ H.Karatsanov Se usando o backport: DateTimeUtils.toDate(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Se estiver usando o java.time built-in: Date.from(yourLocalDateTime.atZone(ZoneId.systemDefault()).toInstant()). Consulte Convertendo entre java.time.LocalDateTime e java.util.Date . A resposta oficial da JodaStephen está lá e também uma resposta mostrando o uso do backport .
Ole VV
4
 public static String getcurrentDateAndTime(){

        Date c = Calendar.getInstance().getTime();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
        String formattedDate = simpleDateFormat.format(c);
        return formattedDate;
    }

// String currentdate=  getcurrentDateAndTime();
indrajeet jyoti
fonte
Está contribuindo com algo substancial para a pergunta ( eu quero a data atual em formato de string, como28-Dec-2011 ) que ainda não está nas outras respostas? De qualquer forma, ainda está usando a SimpleDateFormatclasse notoriamente problemática e desatualizada . Por favor, não precisamos de mais respostas para isso.
VV Ole VV
está funcionando para as melhores práticas; adicione o segundo parâmetro locale SimpleDateFormat simpleDateFormat = new SimpleDateFormat ("aaaa / MM / dd", Locale.ENGLISH);
Rucha Bhatt Joshi
3
Calendar cal = Calendar.getInstance();      
Calendar dt = Calendar.getInstance(); 
dt.clear();
dt.set(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH),cal.get(Calendar.DATE)); 
return dt.getTime();        
Vinayak
fonte
3

Um simples ajuste na solução de Paresh:

Date date = Calendar.getInstance().getTime();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(date);
cNgamba
fonte
3
Calendar c = Calendar.getInstance();
int day = c.get(Calendar.DAY_OF_MONTH);
int month = c.get(Calendar.MONTH);
int year = c.get(Calendar.YEAR);
String date = day + "/" + (month + 1) + "/" + year;

Log.i("TAG", "--->" + date);
rhaldar
fonte
2

Você pode usar o código a seguir para obter uma data no formato desejado.

String date = String.valueOf(android.text.format.DateFormat.format("dd-MM-yyyy", new java.util.Date()));
Android Dev
fonte
Um forro agradável e funciona em Sdks inferiores. A poucos personagens mais curto DateFormat.format ( "dd-MM-aaaa", new java.util.Date ()) toString ().
Jeffrey
1
Date c = Calendar.getInstance().getTime();
System.out.println("Current time => " + c);

SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

Esta é a melhor resposta ...

Fátima
fonte
0

A maneira mais simples de obter a data atual na localidade atual (localidade do dispositivo!):

String currentDate = DateFormat.getDateInstance().format(Calendar.getInstance().getTime());

Se você quiser ter a data em estilos diferentes, use getDateInstance(int style):

DateFormat.getDateInstance(DateFormat.FULL).format(Calendar.getInstance().getTime());

Outros estilos: DateFormat.LONG, DateFormat.DATE_FIELD, DateFormat.DAY_OF_YEAR_FIELD, etc. (uso CTRL+Spacepara ver todos eles)

Se você precisar de tempo também:

String currentDateTime = DateFormat.getDateTimeInstance(DateFormat.DEFAULT,DateFormat.LONG).format(Calendar.getInstance().getTime());
Ivo Stoyanov
fonte
0
  public static String getDateTime() {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMMM dd, yyyy HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return simpleDateFormat.format(date);
    }
Divyesh Patel
fonte
0

tente com este link de código que esta é a resposta correta absoluta para todos os casos em toda a data e hora. ou personalize a data e a hora conforme a necessidade e exigência do aplicativo.

tente com este link. tente com este link

Amitsharma
fonte
0

Eu escrevi o aplicativo de calendário usando o CalendarView e é o meu código:

CalendarView cal = (CalendarView) findViewById(R.id.calendar);
cal.setDate(new Date().getTime());

O campo 'calendar' é meu CalendarView. Importações:

import android.widget.CalendarView;
import java.util.Date;

Tenho data atual sem erros.

Muskovets
fonte
0

Este é o código que eu usei:

             Date date = new Date();  // to get the date
             SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy"); // getting date in this format
             String formattedDate = df.format(date.getTime());
             text.setText(formattedDate);
Savita Sharma
fonte
0

Eu já usei isso:

Date What_Is_Today=Calendar.getInstance().getTime();
SimpleDateFormat Dateformat = new SimpleDateFormat("dd-MM-yyyy");
String Today=Dateformatf.format(What_Is_Today);

Toast.makeText(this,Today,Toast.LENGTH_LONG).show();

no início, recebo tempo, depois declarei um formato de data simples (para obter uma data como: 19-6-2018) e depois uso o formato para alterar a data para a string.

Farshid Ahmadi
fonte
0

apenas um código de linha para obter um formato simples de data:

SimpleDateFormat.getDateInstance().format(Date())

saída: 18 de maio de 2020

SimpleDateFormat.getDateTimeInstance().format(Date())

saída: 18 de maio de 2020 11:00:39

SimpleDateFormat.getTimeInstance().format(Date())

saída: 11:00:39 AM

Espero que esta resposta seja suficiente para obter este formato de data e hora ... :)

vijay saini
fonte
Por favor, não ensine os jovens a usar as aulas SimpleDateFormate as desatualizações há muito ultrapassadas e notoriamente problemáticas DateFormat. Pelo menos não como a primeira opção. E não sem nenhuma reserva. Hoje temos muito melhor na java.timemoderna API de data e hora de Java, e suas DateTimeFormatter. Sim, você pode usá-lo no Android. Para Android mais antigo, consulte Como usar o ThreeTenABP no Android Project .
Ole VV
-1

Este é o código que eu usei :

final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);

// Set current date into textview
tvDisplayDate.setText(new StringBuilder()
    .append(month + 1).append("-") // Month is 0 based, add 1
    .append(day).append("-")
    .append(year).append("   Today is :" + thursday ) );

// Set current date into datepicker
dpResult.init(year, month, day, null);
Dondondon
fonte