Cet article partage les méthodes communes de fonctionnement du temps de calendrier, le contenu spécifique est le suivant
Test de package; import java.text.simpledateFormat; import java.util.calendar; import java.util.date; / ** * méthodes communes de date et de calendrier, de nombreuses méthodes de date ont été obsolètes, donc le calendrier est le principal * * @author tuzongxun123 * * / public datandCalendartest {public static natic nat Utilisez directement la date pour obtenir l'heure du système actuelle, résultat: mar 03 03 08:25:44 CST 2016Date Date = new Date (); // de nombreuses méthodes de date, comme l'obtention d'une certaine année, mois, jour, etc., et définir une certaine année, mois, jour, etc., ne sont plus recommandés. // Il est recommandé d'utiliser à la place diverses méthodes de calendrier, donc aucun enregistrement n'est fait // obtient les millisecondes de la date spécifiée, qui est souvent utilisée pour comparer les tailles de deux dates. date.getTime (); // Utilisez le calendrier pour obtenir l'heure du système actuel. Vous devez obtenir l'objet calendrier et le convertir en sortie de date Calendar Calendar = calendar.getInstance (); // Cette méthode est équivalente à Gettime en date, et obtenez les millisecondes du premier jour de la semaine où se trouve la date spécifiée. Le premier jour par défaut de la semaine est le calendrier du dimanche.getFirstDayofWeek (); // Renvoie l'année où la date du calendrier en cours est, telle que 2016Calendar.get (1); // Calendar est converti à ce jour, Résultat de sortie: TUe May 03 09:31:59 CST 2016Date Date2 = Calendar.GetTime (); System.out.out.out.PrintLn (DATE2); Année, mois et jour, résultat de sortie: lun 03 juin 09:31:59 CST 2013 // Méthodes surchargées couramment utilisées: Calendar.Set (année, mois, date, heure, minute); // Calendar.set (année, mois, date, heure de jour, minute, deuxième); Tous les paramètres sont IntCalendar.Set (2013, 5, 3); System.out.println (calendar.getTime ()); // Utiliser le calendrier pour définir l'année, résultat de la sortie: ven 03 juin 09:42:43 CST 2011Calendar.Set (Calendar.Year, 2011); System.out.println (Calendar.getTime ()); // Set the mois avec Jan. 09:45:32 CST 2011Calendar.set (calendar.month, 0); System.out.println (calendar.gettime ()); // définit le mois avec Calendar et ses propres constantes, notez que le mois commence à 0 Calendar.february); System.out.println (calendar.getTime ()); // définir la journée avec calendrier et nombres, résultat de sortie: Sat 05 février 09:48:25 CST 2011 // Calendar.set (Calendar.Day_of_Month, 5) Le résultat est le même; Calendar.Set (Calendar.Date, 5; forDate = dateToString(new Date());System.out.println(forDate);// String to Date, output result: Thu Nov 12 13:23:11 CST 2015Date strDate = stringToDate("2015-11-12 13:23:11");System.out.println(strDate);// Date to Calendar, output result: 2015Calendar calendar2 = Datetocalendar (Strdate); System.out.println (calendar2.get (1));} / *** Converti la date de date spécifiée en une chaîne au format spécifié * * @Author: Tuzongxun * @Title: DateToString * @param @param date * @reurn Void * @Date May 3, 2016 DateToString (date de date) {String str = "yyyy-mm-dd hh: mm: ss"; SimpledateFormat format = new SimpledateFormat (str); string dateformat = format.format (date); return dateformat;} / *** converti la chaîne dans le format de date spécifié au type de date * * @Autor @param String * @return void * @Date 3 mai 2016 9:16:38 AM * @ lance * / static date StringTodate (String String) {String str = "yyyy-mm-dd hh: mm: ss"; SimpledateFormat Format = new SimpledateFormat (str); date date = new Date (); try {date = format.Parse (String);} exception ();); {e.getStackTrace ();} Date de retour;} / *** Convertir la date de date spécifiée Date en type de calendrier * * @Author: Tuzongxun * @Title: DateTocalendar * @param @param Date * @return void * @date 3 mai 2016 9:13:49 AM * @ lance * / static Calendar Calendar.getInstance (); calendar.settime (date); return calendar;}}Quels autres pièges y a-t-il?
Où est la fosse:
Dans un projet que j'ai rencontré auparavant, j'ai impliqué une fonction: déplacer des données vers une autre collection de bases de données MongoDB chaque jour, c'est-à-dire les tableaux de la base de données relationnelle. Ce nom de collection est un nom fixe plus l'année et le mois où se trouve la date il y a deux mois actuelle.
Cette fonction existait avant d'être en contact avec ce projet, qui est une fonction implémentée par mes collègues précédents, et a écrit une tâche de synchronisation Java.
Ce collègue n'est plus dans notre entreprise, mais il a récemment constaté que cette fonction a des problèmes. Le mouvement des données n'est pas comme prévu. Les données qui auraient dû exister en février sont apparues dans le tableau de janvier.
La racine de la fosse:
Les problèmes liés à MongoDB sont temporairement maintenus par moi, et ce problème doit naturellement être résolu par moi, alors j'ai retiré son code et je l'ai lu. En conséquence, le problème s'est avéré être les méthodes pertinentes de calendrier.
Pour transférer des données il y a deux mois, vous devez d'abord obtenir la date d'il y a deux mois. Le code pertinent pour générer le nom de la table est le suivant:
chaîne privée getDatacollectionName () {calendar calendar = calendar.getInstance (); essayez {calendar.set (calendar.date, -day); return "Alarm_" + TOLLUTUTILS.DATETOFORGATSTRDATE (Calendar.GetTime (), "Yyyy_mm"); } catch (exception e) {logger.error ("{}: la transformation des données a échoué, {}", this.getClass (). getName (), e.getMessage ()); } return null; }Le problème réside dans la méthode du calendrier défini, y compris l'heure de début et de fin de l'utilisation des données de requête ultérieurement, et la même chose est utilisée est Calendar.set (calendar.date, -day);
À première vue, cette méthode semble fixer la date à la date en cours moins le nombre de jours spécifié, mais en fait, le résultat n'est pas comme prévu que vous obtiendrez la date il y a deux mois (le jour ici définit 60, c'est-à-dire deux mois).
Remplissez la fosse:
Après avoir trouvé la raison, j'ai remplacé cette méthode et changé de jeu pour ajouter. Quant aux paramètres à l'intérieur, il n'a pas été déplacé. Le résultat a prouvé que cette méthode peut vraiment réaliser la fonction actuelle, et le résultat obtenu est exactement le résultat attendu.
Bien sûr, vous pouvez également modifier légèrement les paramètres sans modifier la méthode, telle que calendar.set (calendar.date, calendar.get (calendar.date) -day);
Ce qui précède concerne cet article, et j'espère qu'il sera utile pour tout le monde de maîtriser les méthodes courantes de fonctionnement du temps de calendrier.