Necesito determinar el año actual en Java como un entero. Podría simplemente usar java.util.Date()
, pero está en desuso.Obtener el valor entero del año actual en Java
Respuesta
int year = Calendar.getInstance().get(Calendar.YEAR);
¿No está seguro si esto cumple con los criterios de no configurar un nuevo Calendario? (¿Por qué la oposición a hacerlo?)
Al ver su respuesta, Calendar sería un buen objeto para usar. Estaba buscando una línea y no pensé que Calendar lo tuviera para mí. Probado mal, yo soy! ¡Gracias! – karlgrz
¿Qué pasa con la simultaneidad, qué pasa si otro hilo/pieza del código de la biblioteca cambia la hora actual? ¿No sería razonable modificarlo a algo así como: Calendar c = Calendar.getInstance(); sincronizado (c) {c.setTimeInMillis (System.currentTimeMillis()); return c.get (Calendar.YEAR);} – ycnix
Esto devuelve un valor diferente en diferentes versiones de Android. Estoy comparando Android v4.1.2 con v4.2.1. – toobsco42
La manera más fácil es obtener el año del Calendario.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
Calendar.YEAR no es el año actual. – toolkit
Calendar.YEAR se define así ... public final static int AÑO = 1; – cagcowboy
La API get() en Calendar obtiene el dato que está en el campo especificado por la constante. ¡El año está ubicado en el campo de 1 en el objeto Calendario! Calendar.getInstance() obtiene la fecha actual. http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#get(int) –
Este simple (utilizando el Calendario, lo siento) es:
int year = Calendar.getInstance().get(Calendar.YEAR);
También existe la nueva Date and Time API JSR, así como Joda Time
Esto devuelve un valor diferente en diferentes versiones de Android. Estoy comparando Android v4.1.2 con v4.2.1. – toobsco42
@ toobsco42 - prueba google para 'error calendario android.año' – toolkit
Hola @toolkit, he estado investigando sin suerte. Esperaba una respuesta más específica. – toobsco42
Si la aplicación está haciendo un uso intensivo de fecha y el calendario objetos, realmente debería usar Joda Time, porque java.util.Date
es mutable. java.util.Calendar
tiene problemas de rendimiento cuando sus campos se actualizan, y es torpe para la aritmética de fecha y hora.
que utilizan funciones especiales en mi biblioteca para trabajar con días/mes enteros/año -
int[] int_dmy(long timestamp) // remember month is [0..11] !!!
{
Calendar cal = new GregorianCalendar(); cal.setTimeInMillis(timestamp);
return new int[] {
cal.get(Calendar.DATE), cal.get(Calendar.MONTH), cal.get(Calendar.YEAR)
};
};
int[] int_dmy(Date d) {
...
}
Usted puede hacer todo esto usando Operaciones aritméticas con enteros sin necesidad de crear una instancia de un calendario:
return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
Puede estar apagado durante una o dos horas al año nuevo, pero no me da la impresión de que sea un problema.
Espero que nunca toque el código de ninguna alarma. – berezovskyi
¿Estás trabajando para Apple, quizás? http://www.macworld.com/article/2023580/ios-do-not-disturb-feature-oversleeps-on-new-year-s-day.html –
wow, esto es muy pesado, sugeriría que se mantenga es simple como cagcowboy lo ha demostrado. – LStrike
Si desea que el año de cualquier objeto de fecha, he usado el siguiente método:
public static int getYearFromDate(Date date) {
int result = -1;
if (date != null) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
result = cal.get(Calendar.YEAR);
}
return result;
}
Como algunas personas respondieron arriba:
Si desea utilizar la variable más tarde, un mejor uso:
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
Si necesita del año por sólo una condición que mejor uso:
Calendar.getInstance().get(Calendar.YEAR)
Por ejemplo usarlo en un do, mientras que los cheques introducidos año no es menor que el año-200 o más que el año en curso actual (podría ser el año de nacimiento):
import java.util.Calendar;
import java.util.Scanner;
public static void main (String[] args){
Scanner scannernumber = new Scanner(System.in);
int year;
/*Checks that the year is not higher than the current year, and not less than the current year - 200 years.*/
do{
System.out.print("Year (Between "+((Calendar.getInstance().get(Calendar.YEAR))-200)+" and "+Calendar.getInstance().get(Calendar.YEAR)+") : ");
year = scannernumber.nextInt();
}while(year < ((Calendar.getInstance().get(Calendar.YEAR))-200) || year > Calendar.getInstance().get(Calendar.YEAR));
}
También puede utilizar Java 8 de LocalDate
:
import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
Nota: esto solo funciona en Java 8 –
@ AndrewT., Obtenga [el ThreeTen Backport] (http://www.threeten.org/threetenbp/) y también funcionará en Java 6 y 7. –
tl; dr
ZonedDateTime.now( ZoneId.of("Africa/Casablanca") )
.getYear()
zona horaria
The answer por Raffi Khatchadourian sabiamente muestra cómo usar el nuevo java.time package en Java 8. Pero esa respuesta no aborda el problema crítico de la zona horaria para determinar una fecha.
int year = LocalDate.ahora(). getYear();
Ese código depende de la zona horaria predeterminada actual de la JVM. La zona predeterminada se usa para determinar la fecha de hoy. Recuerde, por ejemplo, que en el momento después de la medianoche en París, la fecha en Montreal sigue siendo "ayer".
Por lo tanto, los resultados pueden variar según la máquina en la que se ejecute, un usuario/administrador que cambie la zona horaria del sistema host o cualquier código de Java en cualquier momento cambiando el valor predeterminado actual de la JVM. Es mejor especificar la zona horaria.
Por cierto, siempre use proper time zone names. Nunca use los códigos de 3-4 letras que no están estandarizados ni son únicos.
java.time
Ejemplo en java.time de Java 8.
int year = ZonedDateTime.now( ZoneId.of("Africa/Casablanca") ).getYear() ;
Joda-Time
Algunos idea que el anterior, pero utilizando la biblioteca Joda-Time 2.7.
int year = DateTime.now(DateTimeZone.forID("Africa/Casablanca")).getYear() ;
incremental/Decrementar Año
Si su objetivo es saltar de un año a la vez, sin necesidad de extraer el número de años. Tanto Joda-Time como java.time tienen métodos para sumar/restar un año a la vez. Y esos métodos son inteligentes, manejan el horario de verano y otras anomalías.
Ejemplo en Joda-Time 2.7.
DateTime oneYearAgo = DateTime.now(DateTimeZone.forID("Africa/Casablanca")).minusYears(1) ;
Todos los identificadores de zona para los perezosos (como yo): https://www.mkyong.com/java8/java-display-all-zoneid-and-its-utc-offset/ – FBB
El uso de la API en tiempo de Java 8 (suponiendo que usted es feliz de conseguir el año en la zona horaria predeterminada del sistema), se puede usar the Year::now
method:
int year = Year.now().getValue();
Sugiero siempre pasar el 'ZoneId opcional 'argumento a' ahora' en lugar de confiar implícitamente en la zona predeterminada actual de la JVM (¡que puede cambiar en cualquier momento durante el tiempo de ejecución!). –
Así es como me solía, simple y más fácil
Integer currentYear = gregorianDate.getYear();
Integer comeupYear = currentYear+1;
Integer previousYear = currentYear-1;
también puede utilizar 2 métodos de java.time.YearMonth
(ya que Java 8):
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
Duplica incorrectamente [otra Respuesta] (https://stackoverflow.com/a/33700141/642706) publicada hace mucho tiempo. Y produces un mes que es irrelevante para la Pregunta. E ignoras el problema crucial de la zona horaria. Y tu formateo es complicado. Me alegra verte participar en Stack Overflow. Pero esta respuesta no es lo suficientemente buena. Edite para corregir sus puntos débiles y agregue más valor más allá de lo ya provisto por las otras Respuestas. O elimine su respuesta antes de que recolecte votos abajo. PD Icono de Super avatar! –
Muchas gracias, hombre. He editado el enlace es un poco diferente a mi manera –
- 1. Obtener el próximo año del NSDate actual?
- 2. Cómo obtener el año actual usando Vba
- 3. Día juliano del año en Java
- 4. Comparación del valor entero
- 5. Obtener el valor del cuadro combinado en Java swing
- 6. Cómo obtener el valor entero del día de la semana
- 7. número entero Divide y obtener valor entero
- 8. Obtener el año actual y la próxima forma mysql
- 9. Obtener el valor entero de enum
- 10. ¿Cómo encontrar el día actual del año en PHP?
- 11. iphone Obtiene el año actual como cadena
- 12. Insertar el año actual en un TextView
- 13. Obtener el objeto de fecha para el primer/último día del año actual
- 14. MySQL: la adición año actual como un valor predeterminado para un campo 'año'
- 15. ¿Cómo convertir el texto a la fecha, luego obtener el valor del año?
- 16. ¿Cómo obtener el día del año en ruby?
- 17. cómo obtener el día del año en concha?
- 18. Desreferenciar el valor entero de un bucle en Java
- 19. Obtener un año atrás de la fecha actual
- 20. Manera segura de obtener el día actual mes y año en el lote
- 21. ¿Cómo obtener todas las fechas de fin de semana del año actual en SQL?
- 22. SQL actual mes/año pregunta
- 23. ¿por qué tenemos que calcular el tiempo del año 1970?
- 24. Incrementar el valor int de un entero?
- 25. Cómo obtener el valor del índice Enum en C#
- 26. Año actual en ASP.NET MVC 3
- 27. Sincronización en un valor entero
- 28. obtener el nivel de volumen del sistema actual en iPhone
- 29. obtener la semana del año a partir del día del año
- 30. PHP Obtener el nombre del directorio actual
No, 'java.util.Date' está * no * desaprobado, no como de Java 8. Algunos de sus métodos están en desuso, pero no toda la clase. Pero debe evitar tanto 'java.util.Date' como' java.util.Calendar' ya que son notoriamente molestos, confusos y defectuosos. En su lugar, utilice [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) (en Java 8) o [Joda-Time] (http : //www.joda.org/joda-time/). –