Heim  >  Artikel  >  Java  >  Java Time ---- detaillierte Einführung in java.util.Calendar

Java Time ---- detaillierte Einführung in java.util.Calendar

黄舟
黄舟Original
2017-03-01 13:22:321605Durchsuche

java.util.Calendar

Es gibt mehrere Zeitklassen in Java, aber da Date nach und nach deaktiviert wird, werden die Methoden nach dem Entfernen des Kreuzes langsam hinzugefügt Die verbleibenden verwendbaren Funktionen wurden in Calendar implementiert, und die Unterklasse GregorianCalendar von Calendar ist zu tiefgreifend in der Erforschung spezieller Kalender. Wir verwenden diese Unterklasse normalerweise nicht. Wir können davon ausgehen, dass die Calendar-Klasse in Zukunft die Mainstream-Zeitklasse sein wird. Schauen wir uns die Details der Calendar-Klasse an. Wenn es Fehler gibt, korrigieren Sie uns bitte.

(1) Instanziierung

Die Kalenderklasse ist eine abstrakte Klasse und kann nicht instanziiert werden. Es gibt zwei Möglichkeiten für diese Klasse, eine Kalenderinstanz zu erhalten:

  Calendar calendar = Calendar.getInstance(TimeZone zone , Locale locale);

Wählen Sie durch Aufrufen der getInstance-Methode die Standardattribute Timezone und Locale aus, um einen Kalender zurückzugeben. Sie können auch den Parameter Timezone oder Locale hinzufügen, um den geografischen Standort auszuwählen. Weitere Informationen finden Sie unter java.util.Timezone Pakete util.Locale, die allgemeine Standardzeit ist die gemeinsame Zeit und wir müssen sie eigentlich nicht ändern.

Darüber hinaus gibt es eine Methode, die instanziiert werden kann. Kein Wunder, die alte Java-Routine besteht darin, Unterklassen zur Instanziierung zu verwenden. Es gibt nur eine Unterklasse von Calendar – GregorianCalendar, die in den Gregorianischen Kalender übersetzt wird. Wir werden in Zukunft separat über diesen GregorianCalendar sprechen. Die zweite Art der Instanziierung ist wie folgt:

Calendar calendar = new GregorianCalendar();


(2) Klassenvariablen

Variablen im Kalender Grundsätzlich sind sie durch final definiert. Diese Variablen umfassen alle Zeitinhalte wie Jahr, Monat, Stunde, Vormittag und Nachmittag usw. Ich habe viele davon auf Baidu gefunden. Wenn Sie dies verwenden möchten, schauen Sie sich am besten die API an:

calendar.get(Calendar.YEAR);  
calendar.get(Calendar.MONTH); 
// 月份从0开始 calendar.get(Calendar.DAY_OF_MONTH);   
calendar.get(Calendar.DAY_OF_WEEK);  
calendar.get(Calendar.WEEK_OF_YEAR);  
calendar.get(Calendar.WEEK_OF_MONTH);  
calendar.get(Calendar.HOUR);        
// 12小时calendar.get(Calendar.HOUR_OF_DAY); 
// 24小时 calendar.get(Calendar.MINUTE);  
calendar.get(Calendar.SECOND);  
calendar.get(Calendar.MILLISECOND);

Diese Werte sind endgültig Variablen im Quellcode von JDK. Da es sich um eine statische endgültige Änderung handelt, bedeutet dies, dass diese Variablen Anfangswerte vom Typ int haben. Tatsächlich werden diese Variablen in der Calendar-Klasse als Bereichsbeurteilung fortlaufend nummeriert, wenn einige Funktionen Parameter übergeben. Dann kann diese Situation versehentlich auftreten, wie zum Beispiel der folgende Code:

System.out.println(Calendar.DAY_OF_MOUTH);

Die Ausgabe ist 5, obwohl heute nicht der 5. dieses Monats ist. Das ist tatsächlich ein Fehler. Was Sie ausgeben, ist der Anfangswert 5 von DAY_OF_MOUTH in dieser Klasse. Wenn Sie das Datum des aktuellen Monats darstellen möchten, müssen Sie die Klasseninstanz in das Objekt exportieren, aber in eine Klasse, in der Die Variablen der Klasse können direkt angeklickt werden. Dieser Fehler tritt sehr häufig auf. Die richtige Methode sollte mit der get()-Methode erhalten werden (Kalender ist das Objekt unserer Instanz):

System.out.println(calendar.get(Calendar.DAY_OF_MOUTH));

(3) CompareTo() after() before() Funktion

CompareTo( Calendar othercalendar) gibt einen int-Wert zurück. Wenn die Zeit des Objekts nach der Parameterzeit liegt, wird eine Zahl größer als 0 zurückgegeben, andernfalls wird eine Zahl kleiner als 0 zurückgegeben. Insbesondere wenn die Zeit gleich ist, Es gibt 0 zurück. Ich denke, die Implementierung dieser Methode kann direkt zurückgeben. Machen Sie einen Unterschied mit der Anzahl der Millisekunden (ich denke, meine Vermutung macht Sinn ...) und verwenden Sie die Differenz in Millisekunden als Rückgabewert.
After (Calendar othercalendar) und before (Calendar othercalendar) sind ebenfalls leicht zu erraten. Sie geben einen booleschen Wert zurück. Die Funktion after() gibt einen positiven Wert zurück, wenn die Zeit nach dem Parameter liegt, und die Funktion before ()-Funktion gibt einen positiven Wert zurück, wenn die Zeit nach dem Parameter liegt. Hat zuvor einen positiven Wert zurückgegeben.

Calendar calendar = Calendar.getInstance();
Calendar calendarother = Calendar.getInstance();
calendarother.add(Calendar.DATE, -20);
if(calendar.after(calendarother))
    System.out.println("after");calendarother.add(Calendar.DATE, 100);if(calendar.before(calendarother))
    System.out.println("before");if(calendar.compareTo(calendarother)>0)
        System.out.println(calendar.getTime()+">"+calendarother.getTime());

Das Ausgabeergebnis ist:

after 

  before 

  Sun Jan 11 21:19:49 GMT+08:00 1970>Thu Jan 01 00:00:00 GMT+08:00 1970


(4) get() add() set() setTime()-Funktion

Im obigen Beispiel erscheint die Funktion add(int field, int amount) Diese Funktion ist relativ leistungsstark und kann den Wert des ersten Parameters addieren oder subtrahieren, um den Kalender zu ändern Wert des entsprechenden Elements in der Entität.

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
System.out.println(calendar.getTime());
//输出的日期是当前日期的前一天,其他所有的都不变

Zu get(int field) gibt es nichts zu sagen. Übrigens gibt getTimeInMillis() die Anzahl der Millisekunden zurück , diese Anzahl von Millisekunden Es wird immer noch ziemlich oft verwendet.
Die set()-Methode bietet viele Möglichkeiten zur Eingabe von Parametern, die schriftlich verstanden werden können. Die setTime()-Funktion fügt ein Date-Objekt ein und gibt einen Kalendersatz entsprechend dem Datum zurück. Eine weitere Besonderheit ist, dass der Monat bei 0 beginnt. Wenn Sie den Monat auf 0 setzen, bedeutet dies tatsächlich Januar, und wenn Sie ihn auf 1 setzen, bedeutet dies tatsächlich Februar. Der erste Tag der Woche ist Sonntag und der 7. Tag ist Samstag.

calendar.get(Calendar.DATE);
calendar.getTimeInMillis();

calendar.set(field, value);
calendar.set(year, month, date);
//月份是从0开始,下同
calendar.set(year, month, date, hourOfDay, minute);
calendar.set(year, month, date, hourOfDay, minute, second);
calendar.setTime(Date date);
//Date对象

(5) getTime() clear() isSet()-Funktion

getTime()-Funktion gibt eine Zeit zurück, wahrscheinlich in diesem Format

Sun 11. Januar 21:19:49 GMT+08:00 1970

Sie können die Zeitformatierungsmethode nach Ihren Wünschen ändern. Weitere Informationen finden Sie in meinem anderen Blog Mängel. Die Funktion „clear()“ löscht alle Variablen im Objekt ohne Parameter. Die Zeit nach dem Löschen wird direkt auf ihre ursprüngliche Form zurückgesetzt und wird zu

Do 01. Jan. 00:00:00 GMT+ 08:00 1970

clear() kann auch mit dem Parameter int field angehängt werden, was bedeutet, dass nur dieser Wert gelöscht wird:

calendar.clear(Calendar.YEAR);System.out.println(calendar.getTime());

上述代码最后显示的年份是1970年(不可能清除成0000年…),其他的也可以以此类推。
isSet()方法确定日历字段是否已经设置了一个值,有些值会因为get方法触发计算而被设置,很多的时候,只要进行了初始化,很多值已经被设置了,但是作为一个boolean返回值的函数,检测的时候我们相信还是会起到作用的。

if(calendar.isSet(Calendar.DATE))

(六) 总结

Calendar类正如其名,可以实现一个日历,对其进行操作且功能较为完整。如果你只是需要一个时间,这个类并不一定比new Date()能快多少,但是对于一些细节的操作,还是有很多值得我们学习的地方。

 以上就是java时间----java.util.Calendar的详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn