Respostas:
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
Calendar.getInstance().getTime()
ou Calendar.getInstance().getTimeInMillis()
funcionará.
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 Time
classe 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 1410543205000
começará a repetir.
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.
GregorianCalendar
foi 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 .
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());
String currentDateandTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sdf.setTimeZone(TimeZone.getDefault())
no meio
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
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.
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
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);
Instant.now() // Current moment in UTC.
…ou…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
As outras respostas, enquanto corretas, estão desatualizadas. As antigas aulas de data e hora provaram ser mal projetadas, confusas e problemáticas.
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 .
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.
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/region
como America/Montreal
, Europe/Brussels
ou Asia/Kolkata
. Nunca use os 3-4 carta abreviaturas tais como EST
ou IST
como 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 );
Você pode facilmente gerar a String
como 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.
Você pode chamar os toString
mé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 toString
mé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]
Ou especifique seu próprio padrão de formatação específico com a DateTimeFormatter
classe.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Especifique a Locale
para 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 Locale
nã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 );
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.
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?
Instant.now()
e ZonedDateTime.now()
é obrigatório API 26
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();
Cannot resolve constructor Date()
no Android, o Android SDK usa uma mistura de Java 6 e 7.
Date currentDate = new Date(System.currentTimeMillis());
está correto
new Date(System.currentTimeMillis())
não está certo: (a) é redundante, pois é exatamente o mesmo que new Date()
. (b) A java.util.Date
classe problemática agora é suplantada pelo java.time.Instant
Java 8 e posterior. Portado para Java 6 e 7 no projeto ThreeTen-Backport e para Android anterior (<26) no ThreeTenABP .
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 SimpleDateFormat
partir daqui .
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 .
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);
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);
Calendar
ou GregorianCalendar
. A Date
classe está obsoleta.
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
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);
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
SimpleDateFormat
s e 2 Date
s ... você não pode usar apenas "yyyy/MM/dd HH:mm"
o formato e o calendário de chamadas uma vez?
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);
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
SimpleDateFormat
classe 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.
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));
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
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
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".
Time t = new Time();
usará o fuso horário padrão. Na minha experiência, padrão == atual.
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
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());
Tente isto
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
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);
}
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);
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);