Como converter a data atual em string em java?


Respostas:



62
// GET DATE & TIME IN ANY FORMAT
import java.util.Calendar;
import java.text.SimpleDateFormat;
public static final String DATE_FORMAT_NOW = "yyyy-MM-dd HH:mm:ss";

public static String now() {
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW);
return sdf.format(cal.getTime());
}

Retirado daqui


Melhor resposta para usar Calendário em vez de Data.
Aleatório

5
Estou confuso. Em que universo é Calendarmais desejável do que Date?
jasonmp85

1
Para sua informação, essas classes problemáticas agora são legadas, suplantadas pelas classes java.time. Veja o Tutorial Oracle .
Basil Bourque de

27
// On the form: dow mon dd hh:mm:ss zzz yyyy
new Date().toString();

58
Bem, desculpe por overachieving.
jasonmp85

2
O formato usado por esse método é terrível. Além disso, o fuso horário padrão atual do KVM é implicitamente aplicado, portanto, seus resultados podem variar. E essas classes problemáticas agora são legadas, suplantadas pelas classes java.time. Veja o Tutorial Oracle .
Basil Bourque de


14

tl; dr

LocalDate.now()
         .toString() 

23/01/2017

Melhor especificar o fuso horário desejado / esperado explicitamente.

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .toString() 

java.time

A maneira moderna a partir do Java 8 e posterior é com o framework java.time .

Especifique o fuso horário, pois a data varia em todo o mundo a qualquer momento.

ZoneId zoneId = ZoneId.of( "America/Montreal" ) ;  // Or ZoneOffset.UTC or ZoneId.systemDefault()
LocalDate today = LocalDate.now( zoneId ) ;
String output = today.toString() ;

23/01/2017

Por padrão, você obtém uma String no formato ISO 8601 padrão.

Para outros formatos, use a java.time.format.DateTimeFormatterclasse.


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, eSimpleDateFormat .

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

Para saber mais, consulte o Tutorial Oracle . E pesquise no 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 cordas, não há necessidade de java.sql.*classes.

Onde obter as classes java.time?

O projeto ThreeTen-Extra estende java.time com classes adicionais. Este projeto é um campo de provas para possíveis adições futuras ao java.time. Você pode encontrar algumas classes úteis aqui, como Interval, YearWeek, YearQuarter, e mais .


9

Mais rápido :

String date = FastDateFormat.getInstance("dd-MM-yyyy").format(System.currentTimeMillis( ));

4
Requer org.apache.commons
Josiah Yoder

1

Por hora como AAAA-MM-dd

String time = new DateTime( yourData ).toString("yyyy-MM-dd");

E a Biblioteca de DateTime é:

import org.joda.time.DateTime;


E de qual biblioteca é DateTime? Uma resposta sobre Stack Overflow deve ter alguma explicação, pois este site foi feito para ser mais do que uma biblioteca de snippet.
Basil Bourque

0

A maioria das respostas são / eram válidas. A nova modificação da API JAVA para manipulação de data garantiu que alguma ambiguidade anterior na manipulação de data java fosse reduzida.

Você receberá uma mensagem obsoleta para chamadas semelhantes.

new Date() // deprecated

A chamada acima fez com que o desenvolvedor assumisse que um novo objeto Date fornecerá o objeto Date com o carimbo de data / hora atual. Este comportamento não é consistente em outras classes da API Java.

A nova maneira de fazer isso é usando a instância do calendário .

new SimpleDateFormat("yyyy-MM-dd").format(Calendar.getInstance().getTime()

Aqui também a convenção de nomenclatura não é perfeita, mas é muito organizada. Para uma pessoa como eu, que tem dificuldade em assaltar coisas, mas nunca se esqueceria de algo que soasse / parecesse lógico, esta é uma boa abordagem.

Isso é mais sinônimo da vida real

  1. Pegamos um objeto Calendar e procuramos a hora nele. (você deve estar se perguntando que ninguém consegue tempo com um calendário, é por isso que eu disse que não é perfeito. Mas esse é um tópico totalmente diferente)
  2. Em seguida, queremos a data em um formato de texto simples, então usamos uma classe de utilitário SimpleDateFormat que nos ajuda a formatar a data da etapa 1. Usei aaaa, MM, dd como parâmetros no formato. Parâmetros de formato de data suportados

Outra maneira de fazer isso é usando a API de tempo Joda

new DateTime().toString("yyyy-MM-dd")

ou o muito óbvio

new DateTime(Calendar.getInstance().getTime()).toString("yyyy-MM-dd")

ambos retornarão o mesmo resultado.


FYI, os incômodos aulas em tempo data antigas, tais como java.util.Date, java.util.Calendare java.text.SimpleTextFormatestão agora legado , suplantado pelos java.time classes. Além disso, o projeto Joda-Time está agora em modo de manutenção , com a equipe aconselhando a migração para java.time.
Basil Bourque

1
@BasilBourque Isso é o que eu quis dizer em minha resposta, que a resposta mais votada está certa, mas não é relevante para um desenvolvedor atual. Finalmente java terá uma classe Clock e Clock.getTime () seria muito mais sensato e imitaria a vida real do que as classes Date, DateTime ou Time. Os desenvolvedores Java precisam saber que o OOPS começou como algo que imita cenários da vida real.
Swapnil Vargaonkar

Para sua informação, a Clockimplementação em Java 8 é exatamente igual às classes legadas. Somente em Java 9 chega uma nova implementação, capaz de capturar o momento atual com uma resolução tão fina quanto nanossegundos.
Basil Bourque de

Sim, essa é a razão pela qual escrevi "finalmente" Java terá uma classe Clock que irá imitar o cenário da vida real (conceito OOPS) e mostrar / capturar (da maneira que você prefere dizer) o momento atual.
Swapnil Vargaonkar de

-2
public static Date getDateByString(String dateTime) {
        if(dateTime==null || dateTime.isEmpty()) {
            return null;
        }
        else{
            String modified = dateTime + ".000+0000";
            DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
            Date dateObj = new Date();
            Date dateObj1 = new Date();
            try {
                if (dateTime != null) {
                    dateObj = formatter.parse(modified);
                }

            } catch (ParseException e) {
                e.printStackTrace();
            }

            return dateObj;
        }

    }

1
Algumas explicações sobre esse trecho de código provavelmente seriam benéficas.
Pyves de

1
A resposta não é relevante para a pergunta. E não, você não pode passar a data em nenhum Stringformato para a sua função.
Jerin Joseph
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.