J'ai besoin de déterminer l'année en cours en Java sous la forme d'un nombre entier. Je pourrais juste utiliser java.util.Date()
, mais il est obsolète.Obtenir la valeur entière de l'année en cours en Java
Répondre
int year = Calendar.getInstance().get(Calendar.YEAR);
Vous ne savez pas si cela répond aux critères de non-installation d'un nouveau calendrier? (Pourquoi l'opposition à le faire?)
En voyant votre réponse, le calendrier serait un bon objet à utiliser. Je cherchais un one-liner et je ne pensais pas que Calendar aurait ça pour moi. Je me suis trompé! Merci! – karlgrz
Qu'en est-il de la concurrence, que se passe-t-il si d'autres threads/morceaux de code de bibliothèque changent l'heure actuelle? Ne serait-il pas raisonnable de le modifier à quelque chose comme: Calendrier c = Calendar.getInstance(); synchronized (c) {c.setTimeInMillis (System.currentTimeMillis()); return c.get (Calendar.YEAR);} – ycnix
Cela renvoie une valeur différente dans différentes versions d'Android. Je compare Android v4.1.2 avec v4.2.1. – toobsco42
Le moyen le plus simple est d'obtenir l'année à partir du calendrier.
// year is stored as a static member
int year = Calendar.getInstance().get(Calendar.YEAR);
Calendar.YEAR n'est pas l'année en cours. – toolkit
Calendar.YEAR est défini ainsi ... public final static int YEAR = 1; – cagcowboy
L'API get() sur le calendrier obtient la référence située dans le champ spécifié par la constante. L'année est située dans le champ 1 de l'objet Calendrier! Calendar.getInstance() obtient la date actuelle. http://java.sun.com/j2se/1.4.2/docs/api/java/util/Calendar.html#get(int) –
Ce simple (en utilisant le calendrier, désolé) est:
int year = Calendar.getInstance().get(Calendar.YEAR);
Il y a aussi la nouvelle Date and Time API JSR, ainsi que Joda Time
Cela renvoie une valeur différente dans différentes versions d'Android. Je compare Android v4.1.2 avec v4.2.1. – toobsco42
@ toobsco42 - essayez de googler pour 'bug calendar.year android' – toolkit
Hey @toolkit, j'ai fait des recherches sans succès. J'espérais une réponse plus spécifique. – toobsco42
Si votre application fait un usage intensif de la date et de calendrier objets, vous devriez vraiment utiliser Joda Time, car java.util.Date
est mutable. java.util.Calendar
a des problèmes de performance lorsque ses champs sont mis à jour, et est maladroit pour l'arithmétique datetime.
J'utilise des fonctions spéciales dans ma bibliothèque pour travailler avec jours/mois/année ints -
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) {
...
}
Vous pouvez faire tout cela en utilisant les mathématiques entier sans avoir à instancier un calendrier:
return (System.currentTimeMillis()/1000/3600/24/365.25 +1970);
Peut être fermé pendant une heure ou deux à la nouvelle année mais je n'ai pas l'impression que c'est un problème?
Espérons que vous ne toucherez jamais le code des alarmes. – berezovskyi
travaillez-vous pour apple, peut-être? http://www.macworld.com/article/2023580/ios-do-not-disturb-feature-oversleeps-on-new-year-s-day.html –
wow, c'est très lourd, je suggère de garder c'est simple comme cagcowboy l'a montré. – LStrike
Si vous voulez que l'année de tout objet de ce jour, j'ai utilisé la méthode suivante:
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;
}
Comme certaines personnes ont répondu ci-dessus:
Si vous souhaitez utiliser plus tard la variable, une meilleure utilisation:
int year;
year = Calendar.getInstance().get(Calendar.YEAR);
Si vous avez besoin de l'année pour seulement une condition que vous mieux utiliser:
Calendar.getInstance().get(Calendar.YEAR)
Par exemple l'utiliser dans un do tout que les contrôles introduits année est au moins l'année 200 en cours ou plus l'année en cours (Peut-être l'année de naissance):
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));
}
Vous pouvez également utiliser Java 8 de LocalDate
:
import java.time.LocalDate;
//...
int year = LocalDate.now().getYear();
Note: cela ne fonctionne que sur Java 8 –
@ AndrewT., Obtenez [le BackTour ThreeTen] (http://www.threeten.org/threetenbp/) et cela fonctionnera aussi en Java 6 et 7. –
tl; dr
ZonedDateTime.now( ZoneId.of("Africa/Casablanca") )
.getYear()
Time Zone
The answer par Raffi Khatchadourian montre sagement comment utiliser le nouveau java.time package dans Java 8. Mais cette réponse ne parvient pas à résoudre le problème critique de fuseau horaire dans la détermination d'une date.
int année = date locale.maintenant(). getYear();
Ce code dépend du fuseau horaire par défaut actuel de la JVM. La zone par défaut est utilisée pour déterminer la date d'aujourd'hui. Souvenez-vous, par exemple, qu'à minuit passé à Paris, la date à Montréal est encore «hier». Par conséquent, vos résultats peuvent varier en fonction de la machine sur laquelle il s'exécute, d'un utilisateur/administrateur modifiant le fuseau horaire du système hôte ou de tout code Java à tout moment modifiant la valeur par défaut actuelle de la JVM. Mieux vaut spécifier le fuseau horaire. Par ailleurs, utilisez toujours proper time zone names. N'utilisez jamais les codes à 3 ou 4 lettres qui ne sont ni standardisés ni uniques.
java.time
Exemple dans java.time de Java 8.
int year = ZonedDateTime.now( ZoneId.of("Africa/Casablanca") ).getYear() ;
Joda-Time
Une idée comme ci-dessus, mais en utilisant la bibliothèque Joda-Time 2.7.
int year = DateTime.now(DateTimeZone.forID("Africa/Casablanca")).getYear() ;
incrémention/décrémentation Année
Si votre but est de sauter une année à la fois, pas besoin d'extraire le numéro de l'année. Joda-Time et java.time ont toutes deux des méthodes pour ajouter/soustraire une année à la fois. Et ces méthodes sont intelligentes, la gestion de l'heure d'été et d'autres anomalies.
Exemple dans Joda-Time 2.7.
DateTime oneYearAgo = DateTime.now(DateTimeZone.forID("Africa/Casablanca")).minusYears(1) ;
Tous les ID de zone pour les paresseux (comme moi): https://www.mkyong.com/java8/java-display-all-zoneid-and-its-utc-offset/ – FBB
En utilisant l'API de temps de Java 8 (en supposant que vous êtes heureux d'avoir l'année dans le temps par défaut de votre système de zone), vous pouvez utiliser the Year::now
method:
int year = Year.now().getValue();
Je suggère toujours de passer le 'ZoneId facultatif 'argument à' now' plutôt que de s'appuyer implicitement sur la zone par défaut actuelle de la JVM (qui peut changer à tout moment pendant l'exécution!). –
Voilà comment j'utilisé, simple et le plus facile
Integer currentYear = gregorianDate.getYear();
Integer comeupYear = currentYear+1;
Integer previousYear = currentYear-1;
Vous pouvez également utiliser 2 méthodes de java.time.YearMonth
(depuis Java 8):
import java.time.YearMonth;
...
int year = YearMonth.now().getYear();
int month = YearMonth.now().getMonthValue();
Vous dupliquez incorrectement [une autre réponse] (https://stackoverflow.com/a/33700141/642706) posté depuis longtemps. Et vous produisez un mois sans rapport avec la question. Et vous ignorez la question cruciale du fuseau horaire. Et votre formatage est désordonné. Je suis content de vous voir participer à Stack Overflow. Mais cette réponse n'est pas assez bonne. Modifier pour corriger ses faiblesses et ajouter plus de valeur au-delà de ce qui est déjà fourni par les autres réponses. Ou supprimez votre réponse avant qu'elle ne recueille des votes négatifs. P.S. Icône de super avatar! –
Merci beaucoup l'homme. J'ai édité. le lien est un peu différent que mon chemin –
- 1. Comment convertir un double en valeur entière la plus proche?
- 2. Comment puis-je obtenir la valeur (chaîne) de la sélection en cours dans une liste déroulante?
- 3. Comment obtenir le fichier en cours, la classe en cours et la méthode actuelle avec Python?
- 4. Obtenir la valeur de mode dans Java
- 5. obtenir le type de curseur de la souris en cours
- 6. Comment obtenir Rembourrage ou de la valeur de la marge en valeur relative en utilisant jQuery
- 7. Comment obtenir la hauteur de chaîne réelle en Java?
- 8. Désactiver la réflexion Java pour le thread en cours
- 9. Comment obtenir l'année en cours en utilisant SQL sur Oracle?
- 10. imprimer une autre page de la page en cours en passant une valeur
- 11. obtenir la valeur maximale en php (au lieu de mysql)
- 12. obtenir la valeur de l'autre colonne en dehors de la colonne de valeur dans Infragistics ultracombo
- 13. Erreur SQLite: impossible de valider la transaction - instructions SQL en cours en utilisant le code Java
- 14. NSIS obtenir le chemin d'accès du fichier d'installation en cours qui est en cours d'exécution
- 15. Comment obtenir le titre de la fenêtre active en cours en utilisant C#?
- 16. Comment obtenir la valeur de l'élément d'entrée en direct de la valeur
- 17. Obtenir le processus en cours donné handle de processus
- 18. Obtenir la valeur de la zone de saisie en html en externe Javascript
- 19. Stop QNetworkRequest mise en mémoire tampon de la requête entière
- 20. Obtenir la valeur de dropdownlist en utiliser la valeur dans UrlHelper
- 21. Objets en Java Référence ou Valeur
- 22. MSSQL Serveur - obtenir une partie entière d'une valeur décimale dans la colonne calculée
- 23. Capture d'écran de la page en cours en utilisant PHP
- 24. cours de décorateur en Python
- 25. obtenir le nom de l'attribut en plus de la valeur de l'attribut en xml
- 26. page en surbrillance en cours ne pas la page en cours
- 27. Comment obtenir cette valeur en CGFloat?
- 28. Comment obtenir la valeur d'une liste déroulante en utilisant xajax.getFormValues?
- 29. Obtenir la valeur d'un élément dans Cocoa en utilisant TouchXML
- 30. Obtenir la valeur entre deux sous-chaînes en utilisant regex
Non, 'java.util.Date' n'est pas obsolète, pas à partir de Java 8. Certaines de ses méthodes sont obsolètes mais pas la classe entière. Mais vous devriez éviter 'java.util.Date' et' java.util.Calendar' car ils sont notoirement gênants, confus et défectueux. Au lieu de cela, utilisez [java.time] (http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html) (en Java 8) ou [Joda-Time] (http : //www.joda.org/joda-time/). –