Respuestas:
Podrías usar:
import java.util.Calendar
Date currentTime = Calendar.getInstance().getTime();
Hay muchas constantes en Calendar para todo lo que necesita.
: Editar
Comprobar documentación de la clase Calendario
Calendar.getInstance().getTime()
o Calendar.getInstance().getTimeInMillis()
funcionará.
Puede ( pero ya no debería , ¡vea a continuación!) Usar android.text.format.Time :
Time now = new Time();
now.setToNow();
De la referencia vinculada anteriormente:
La clase Time es un reemplazo más rápido para las clases java.util.Calendar y java.util.GregorianCalendar. Una instancia de la clase Time representa un momento en el tiempo, especificado con una segunda precisión.
NOTA 1: Han pasado varios años desde que escribí esta respuesta, y se trata de una clase antigua, específica de Android y ahora en desuso. Google ahora dice que "[t] su clase tiene varios problemas y se recomienda que se use GregorianCalendar ".
NOTA 2: Aunque la Time
clase tiene un toMillis(ignoreDaylightSavings)
método, esto es simplemente una conveniencia para pasar a métodos que esperan tiempo en milisegundos. El valor del tiempo solo es preciso a un segundo ; la porción de milisegundos es siempre 000
. Si en un bucle lo haces
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 ...
La secuencia resultante repetirá el mismo valor, por ejemplo 1410543204000
, hasta que 1410543205000
comience el siguiente segundo, momento en el que comenzará a repetirse.
SystemClock.uptimeMillis()
para intervalos de tiempo. Dado que eso es lo que usan la mayoría de las funciones integradas, existe una fuerte motivación para que se implemente bien en todos los dispositivos. Vea la discusión en SystemClock ... Si desea correlacionar eso con la hora del día, en onResume de la aplicación, lea esto y Time / setToNow / toMillis. Recuerda la diferencia entre esos.
GregorianCalendar
fue suplantado hace años en Java y en Android posterior por las clases java.time , específicamente ZonedDateTime
. Para Android anterior, vea los proyectos ThreeTen-Backport y ThreeTenABP .
Si desea obtener la fecha y la hora en un patrón específico, puede usar lo siguiente:
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
O,
Fecha :
String currentDate = new SimpleDateFormat("dd-MM-yyyy", Locale.getDefault()).format(new Date());
Hora:
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())
en el medio
Para aquellos que prefieren un formato personalizado, pueden usar:
DateFormat df = new SimpleDateFormat("EEE, d MMM yyyy, HH:mm");
String date = df.format(Calendar.getInstance().getTime());
Mientras que puede tener patrones 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
En realidad, es más seguro configurar la zona horaria actual establecida en el dispositivo Time.getCurrentTimezone()
, o de lo contrario obtendrá la hora actual en UTC.
Time today = new Time(Time.getCurrentTimezone());
today.setToNow();
Luego, puede obtener todos los campos de fecha que desee, como, por ejemplo:
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
Vea la clase android.text.format.Time para todos los detalles.
ACTUALIZAR
Como muchas personas señalan, Google dice que esta clase tiene una serie de problemas y que ya no se debe usar:
Esta clase tiene varios problemas y se recomienda utilizar GregorianCalendar en su lugar.
Problemas conocidos:
Por razones históricas cuando se realizan cálculos de tiempo, toda la aritmética se realiza actualmente utilizando enteros de 32 bits. Esto limita el rango de tiempo confiable representable desde 1902 hasta 2037. Consulte el artículo de wikipedia sobre el problema del año 2038 para obtener más detalles. No confíe en este comportamiento; Puede cambiar en el futuro. Llamar a switchTimezone (String) en una fecha que no puede existir, como una hora de la pared que se omitió debido a una transición DST, dará como resultado una fecha en 1969 (es decir, -1 o 1 segundo antes del 1 de enero de 1970 UTC). Gran parte del formato / análisis asume texto ASCII y, por lo tanto, no es adecuado para su uso con secuencias de comandos que no sean ASCII.
Para la fecha y hora actuales, use:
String mydate = java.text.DateFormat.getDateTimeInstance().format(Calendar.getInstance().getTime());
Qué salidas:
Feb 27, 2012 5:41:23 PM
Pruebe de esta manera Todos los formatos se dan a continuación para obtener el formato de fecha y 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.
…o…
ZonedDateTime.now( ZoneId.of( "America/Montreal" ) ) // In a particular time zone
Las otras respuestas, aunque correctas, están desactualizadas. Las antiguas clases de fecha y hora han demostrado ser pobremente diseñadas, confusas y problemáticas.
Esas viejas clases han sido suplantadas por el marco java.time .
Estas nuevas clases están inspiradas en el exitoso proyecto Joda-Time , definido por JSR 310 y ampliado por ThreeTen-Extra proyecto .
Vea el Tutorial de Oracle .
Instant
Un Instant
es un momento en la línea de tiempo en UTC con una resolución de hasta nanosegundos .
Instant instant = Instant.now(); // Current moment in UTC.
Aplicar una zona horaria ( ZoneId
) para obtener unZonedDateTime
. Si omite la zona horaria, la zona horaria predeterminada actual de su JVM se aplica implícitamente. Es mejor especificar explícitamente la zona horaria deseada / esperada.
Utilice los nombres propios de la zona horaria en el formato de continent/region
como America/Montreal
, Europe/Brussels
o Asia/Kolkata
. Nunca use las abreviaturas de 3-4 letras como EST
o IST
ya que no están estandarizadas ni son únicas.
ZoneId zoneId = ZoneId.of( "America/Montreal" ); // Or "Asia/Kolkata", "Europe/Paris", and so on.
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
Puede generar fácilmente una String
representación textual del valor de fecha y hora. Puede utilizar un formato estándar, su propio formato personalizado o un formato localizado automáticamente.
Puede llamar a los toString
métodos para obtener formato de texto utilizando el estándar ISO 8601 común y sensible .
String output = instant.toString();
2016-03-23T03: 09: 01.613Z
Tenga en cuenta que para ZonedDateTime
, el toString
método extiende el estándar ISO 8601 agregando el nombre de la zona horaria entre corchetes. Información extremadamente útil e importante, pero no estándar.
2016-03-22T20: 09: 01.613-08: 00 [América / Los_Angeles]
O especifique su propio patrón de formato particular con la DateTimeFormatter
clase.
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy hh:mm a" );
Especifique a Locale
para un idioma humano (inglés, francés , etc.) para traducir el nombre del día / mes y también para definir normas culturales como el orden del año, el mes y la fecha. Tenga en cuenta que Locale
no tiene nada que ver con la zona horaria.
formatter = formatter.withLocale( Locale.US ); // Or Locale.CANADA_FRENCH or such.
String output = zdt.format( formatter );
Mejor aún, deje que java.time haga el trabajo de localización automáticamente.
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.MEDIUM );
String output = zdt.format( formatter.withLocale( Locale.US ) ); // Or Locale.CANADA_FRENCH and so on.
El marco java.time está integrado en Java 8 y versiones posteriores. Estas clases suplantan a las antiguas clases problemáticas de fecha y hora heredadas como java.util.Date
,Calendar
, y SimpleDateFormat
.
El proyecto Joda-Time , ahora en modo mantenimiento , aconseja la migración a java.time clases .
Para obtener más información, consulte el Tutorial de Oracle . Y busque Stack Overflow para obtener muchos ejemplos y explicaciones. La especificación es JSR 310 .
Puede intercambiar objetos java.time directamente con su base de datos. Utilice un controlador JDBC compatible con JDBC 4.2 o posterior. No hay necesidad de cadenas, no hay necesidad de java.sql.*
clases.
¿Dónde obtener las clases java.time?
Instant.now()
y ZonedDateTime.now()
se requiere API 26
Para obtener la hora actual, puede usar System.currentTimeMillis()
cuál es estándar en Java. Luego puedes usarlo para crear una fecha
Date currentDate = new Date(System.currentTimeMillis());
Y como lo mencionaron otros para crear un tiempo
Time currentTime = new Time();
currentTime.setToNow();
Cannot resolve constructor Date()
en Android, el SDK de Android utiliza una mezcla de Java 6 y 7.
Date currentDate = new Date(System.currentTimeMillis());
es correcto
new Date(System.currentTimeMillis())
no está bien: (a) es redundante, ya que es exactamente lo mismo que new Date()
. (b) La java.util.Date
clase problemática ahora es reemplazada por java.time.Instant
Java 8 y posteriores. Retroportado a Java 6 y 7 en el proyecto ThreeTen-Backport , y a Android anterior (<26) en ThreeTenABP .
Puedes usar el código:
Calendar c = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(c.getTime());
Salida:
2014-11-11 00:47:55
También obtienes más opciones de formato SimpleDateFormat
desde aquí .
java.util.Date
, java.util.Calendar
y java.text.SimpleDateFormat
ahora son heredadas , suplantadas por las clases java.time integradas en Java 8 y posteriores. Ver Tutorial de Oracle .
Fácil, puede analizar el tiempo para obtener valores separados para el tiempo actual, de la siguiente manera:
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);
Lo mismo ocurre con la fecha, de la siguiente manera:
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);
Hay varias opciones, ya que Android es principalmente Java, pero si desea escribirlo en una vista de texto, el siguiente código sería suficiente:
String currentDateTimeString = DateFormat.getDateInstance().format(new Date());
// textView is the TextView view that should display it
textView.setText(currentDateTimeString);
Calendar
o GregorianCalendar
. La Date
clase está en desuso.
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
Patrones de formato de fecha
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 es un método que será útil para obtener la fecha y la 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;
}
Puede llamar a este método y obtener los valores actuales de fecha y hora:
2017/01//09 19:23
SimpleDateFormat
sy 2 Date
s ... ¿no puede simplemente usarlo "yyyy/MM/dd HH:mm"
como formato y calendario de llamadas una 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 la fecha y hora actuales con formato, use
En 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)
En 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)
}
Patrones de formateador de fecha
"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
clase notoriamente problemática y desactualizada . Incluso antes de Oreo, no es necesario, puede utilizar ThreeTenABP , el backport de java.time, la moderna API de fecha y hora de Java.
Si necesita la fecha actual:
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);
Si necesita la hora actual:
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 un formato de fecha y hora personalizado:
SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZZZ",Locale.ENGLISH);
String cDateTime=dateFormat.format(new Date());
La salida es como el siguiente formato: 2015-06-18T10: 15: 56-05: 00
Date todayDate = new Date();
todayDate.getDay();
todayDate.getHours();
todayDate.getMinutes();
todayDate.getMonth();
todayDate.getTime();
Puede obtener la fecha usando:
Time t = new Time(Time.getCurrentTimezone());
t.setToNow();
String date = t.format("%Y/%m/%d");
Esto le dará un resultado en una forma agradable, como en este ejemplo: "2014/02/09".
Time t = new Time();
utilizará la zona horaria predeterminada. En mi experiencia, por defecto == actual.
Bueno, tuve problemas con algunas respuestas de la API, así que fusiono este código, espero que les sirva, chicos:
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);
Salida: 03:25 PM - 03/10/2017
Simplemente puede usar el siguiente 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());
Prueba esto
String mytime = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());
El siguiente método devolverá la fecha y hora actuales en String, use una zona horaria diferente según su zona horaria real. He usado GMT
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);
}
Debe usar la clase Calender de acuerdo con la nueva API. La clase de fecha está en desuso ahora.
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);
Intenta usar el siguiente código:
Date date = new Date();
SimpleDateFormat dateFormatWithZone = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'",Locale.getDefault());
String currentDate = dateFormatWithZone.format(date);