Čas API pojednavá čas obecným, globálním způsobem. Základem je standard UTC (Unified Time Corrected) počítaný od nuly ve čtvrtek 1.1.1970 00:00:00 GMT (Greenwich Mean Time). Okamžitou hodnotu v msec lze zjistit nejsnadněji těmito způsoby: long t = System.currentTimeMillis( ); long t = new GregorianCalendar( ).getTimeInMillis( ); long t = Calendar.getInstance( ).getTimeInMillis( ); Hodnota t může být i záporná. Převod do čitelného tvar: Date d = new Date( t ); // …print( d ); A opačně: t = d.getTime( ); V chronologii nutno brát v úvahu historické reformy kalendáře: juliánskou a nyní zejména gregoriánskou. Reforma Gregora XIII: po 1582 Oct 4 následoval Fri 1582 Oct 15 (-10 dní). (1970 Jan 10) – (1 Jan 1) = 719177 dní. Rok 0 = 1, pro roky < 0 nefunguje. Pro Long.MAX_VALUE je poslední den 292 278 994 Sun Aug 17 08:12:55 PJV04
Zpracování času K práci s časem slouží třídy z java.util: Date - starší třída - značně deprecated. Calendar – je abstraktní, její potomek GregorianCalendar je konkrétní, obě respektují místní čas i zvyklosti ( TimeZone a Locale ). Volba jednotlivých údajů se zadává symbolicky - přičemž pozor: SUNDAY=1 ... SATURDAY=7, JANUARY=0 ... DECEMBER=11. Příklad: Calendar cal = Calendar.getInstance(); // fixes time and prints: System.out.println( cal.getTime( ) ); // Sat Mar 06 20:06:28 CET 2004 System.out.println( cal.get( cal.MONTH ) ); // 2 long System.nanoTime( ) – měří v nsec. Je vhodný pro stopky, tj. jen pro rozdílový čas. Nezdá se, že udává skutečně spotřebovaný CPU. Chronologii podporují balíček: java.time a podbalíčky: .chrono .format .temporal .zone PJV04
Zpracování času vv, dd. mm. yyyy hh:mm:ss ap zzz Date da = new Date( ); // just now new Date( 1_000_000_000_000L ); // Sep 9, 2001 3:46:40 AM Locale locale = Locale.getDefault( ); // = new Locale("EN","US"); int styleD = DateFormat. ( SHORT | MEDIUM | LONG | FULL ) ; int styleT = DateFormat. ( SHORT | MEDIUM | LONG | FULL ) ; DateFormat df = DateFormat.getDateTimeInstance( styleD, styleT, locale ); String s = df.format( da ); vv, dd. mm. yyyy hh:mm:ss ap zzz PJV04
java.util Comparable Serializable Date Runnable Cloneable Date Time java.lang Date Runnable Serializable java.sql Cloneable Timer Task Date TimeZone Calendar java.sql Time Timer Simple TimeZone Gregorian Calendar java.sql TimeStamp PJV04 ALG
Třída Formatter Úpravu tisku v PrintStream.printf , Writer.printf a String.format. Detailně viz: java.util.Formatter % [ arg_index$ ] [ flags ] [ width ] [ .precision ] conversion conversion: t - čas UTC long: tS, ts ~ SS, ssssssssss – sekunda od 1.1.1970 tM ~ minuta 00-59 tH ~ hodina 00-23 td ~ dd - den 01-31 tm ~ mm - měsíc 01-12 tY, ty ~ YYYY , yy tZ, tz ~ zkratka zóny, ofset zóny: HHMM Příklad: long ctim = System.currentTimeInMillis( ) ; System.out.printf(" %tY %n", ctim); PJV04
Abstraktní třída TimeZone a konkrétní SimpleTimeZone definuje časové pásmo, jeho identifikátor, odchylku od GMT v msec i parametry pro případné užívání letního času ( DST – Daylight Savings Time ). String[ ] ids = TimeZone.getAvailableIDs( … ) – získání id pásem TimeZone tz = TimeZone.getTimeZone( "America/Los_Angeles" ); TimeZone.getDefault( ) - vrátí řetěz "Europe/Prague" PJV04
java.time Temporal Clock Duration Instant LocalDate Japanese Date Amount Temporal Accessor Temporal Adjuster java.time.chrono Duration Temporal ChronoLocal Date Instant LocalDate Japanese Date Minguo Date ThaiBuddhist Date PJV04
java.time.chrono Comparable Era Chronology Iso Chronology Iso Era java.lang java.time.temporal java.time.temporal Comparable Temporal Accessor Temporal Adjuster Chronology Era Iso Chronology Iso Era Hirjah Chronology Hirjah Date Hirjah Era Japanese Chronology Japanese Date Japanese Era Minguo Chronology Minguo Date Minguo Era ThaiBuddhist Chronology ThaiBuddhist Date ThaiBuddhist Era PJV04