java
/data
1
Data
class java.util.Date
•
daty rozpoczynaj si od epoki UNIXowej tj. 1.01.1970
Date d = new Date();
System.out.println(d); // == System.out.println(d.toString());
// Fri Apr 08 22:31:55 CEST 2005
class java.util.Calendar
•
jest to klasa abstrakcyjna
•
metoda Calendar.getInstance() zwraca obiekt klasy potomnej
odpowiadaj cy ustawieniom lokalnym czyli w Europie i
Ameryce: GregorianCalendar
System.out.println(Calendar.getInstance().getTime());
// Fri Apr 08 22:31:55 CEST 2005
•
samo Calendar.getInstance() odda wszystkie wewn trzne
informacje o stanie klasy i nie jest u yteczne
•
cz sto u ywa si potomka tej klasy: GregorianCalendar
class java.text.DateFormat
•
klasa abstrakcyjna
•
pozwala wy wietla dat i czas w zadanym formacie
•
cz sto u ywa si potomka tej klasy: SimpleDateFormat
import java.util.Date;
import java.text.DateFormat;
Date d = new Date();
SimpleDateFormat f = new SimpleDateFormat ("E yyyy.MM.dd
'godz.' hh:mm:ss a zzz");
System.out.println("Po sformatowaniu: " + f.format(d));
// Po sformatowaniu: Pt 2005.04.08 godz. 10:47:09 PM CEST
java
/data
2
symbol
znaczenie
sposób
prezentacji
przykład
G
era
tekst
AD
y
rok
liczba
2002
M
miesi c
tekst/liczba luty / 02
d
dzie
liczba
15
h
godzina (12)
liczba
6
H
godzina (24)
liczba
18
m
minuta
liczba
30
s
sekunda
liczba
43
S
milisekunda
liczba
234
E
dzie tygodnia
tekst
niedziela
D
dzie roku
liczba
324
F
dzie tygodnia w
miesi cu
liczba
3 (trzecia niedziela
wrze nia)
w
tydzie roku
liczba
37
W
tydzie miesi ca
liczba
3
a
oznaczenie
A.M./P.M.
tekst
PM
k
godzina dnia (1-
24)
liczba
12
K
godzina dnia w
form. 12g (0-11)
liczba
0
z
strefa czasowa
tekst
Central European
Summer Time
‘
oznaczenie tekstu ogranicznik
‘’
pojedynczy znak
apostrofu
litera
je li w tabeli jest „tekst”:
podanie 4 lub wi cej liter pełna nazwa,
podanie mniejszej liczby skrót (je li istnieje)
np. E Pn, EEEE Poniedziałek
je li w tabeli jest „liczba”:
liczba powtórze znaku minimalna liczba wy wietlanych cyfr
(je li liczba jest mniejsza to zera na pocz tku)
np. yy 04, yyyy 2004
je li w tabeli jest tekst/liczba:
MM 09, MMM wrz, MMMM wrzesie
java
/data
3
•
ustawianie konkretnej daty i czasu
//1
GregorianCalendar d1 = new GregorianCalendar(1986, 05, 05);
// 5 maja 1986
GregorianCalendar d2= new GregorianCalendar(); // bie
ca data
Calendar d3= Calendar.getInstance(); // bie
ca data
System.out.println("Wtedy był " + d1.getTime());
System.out.println("Teraz jest " + d2.getTime());
System.out.println("Teraz jest te " + d3.getTime());
// Wtedy był Thu Jun 05 00:00:00 CEST 1986
// Teraz jest Fri Apr 08 23:23:13 CEST 2005
// Teraz jest te Fri Apr 08 23:23:13 CEST 2005
//2
d3.set(Calendar.YEAR, 1915);
d3.set(Calendar.MONTH, Calendar.APRIL);
d3.set(Calendar.DAY_OF_MONTH, 12);
System.out.println("D3 przypisano dat " + d3.getTime());
// d3 przypisano dat Mon Apr 12 23:28:45 CET 1915
•
zamiana ła cucha znaków na dat
public static void main(String[] args) {
SimpleDateFormat f = new SimpleDateFormat ("yyyy-MM-dd");
String in = args.length == 0 ? "1818-11-11" : args[0];
System.out.print("Ła cuch "+in+" został przetworzony na ");
Date t;
try { t = f.parse(in);
System.out.println(t); }
catch (ParseException e) {
System.out.println("Nie da si prztworzy danych w oparciu
o format: " + f);
// Ła cuch 1818-11-11 został przetworzony na
// Wed Nov 11 00:00:00 CET 1818
java
/data
4
•
zamiana ła cucha znaków na dat – data stanowi tylko cz
ła cucha u y substring()
SimpleDateFormat f = new SimpleDateFormat ("yyyy-MM-dd");
String in[] = { "ur. 1913-10-01 Vancouver, B.C.",
"zm. 1948-03-01 Ottawa, ON"};
for (int i=0; i<in.length; i++) {
String aLine = in[i];
String action;
switch(aLine.charAt(0)) {
case 'u': action = "Data urodzenia"; break;
case 'z': action = "Data mierci"; break;
default: System.err.println("Bł dy kod w wierszu: " + aLine);
continue;
}
int p = aLine.indexOf(' '); //znajdzie odstep po .
ParsePosition pp = new ParsePosition(p);
//ta klasa słu y do sledzenia miejsca kursora
Date d = f.parse(aLine, pp); //skonwertuje date
if (d == null) {
System.err.println("Niepoprawna data w wierszu " + aLine);
continue; }
String location = aLine.
substring(pp.getIndex());
//pobierze nazwe miasta, ktora jest po dacie
System.out.println(action + " " + d + " w " + location); }
// Data urodzenia Wed Oct 01 00:00:00 CET 1913 w
// Vancouver, B.C.
// Data mierci Mon Mar 01 00:00:00 CET 1948 w
// Ottawa, ON
•
milisekundy na daty
long now = System.currentTimeMillis();
System.out.println("Przetwarzamy " + Long.toHexString(now) + "
--> " + new java.util.Date(now));
// Przetwarzamy 10328d82837 --> Sat Apr 09 23:23:04 CEST 2005
java
/data
5
•
odejmowanie/dodawanie dat
//1
Date now = new Date();
long t = now.getTime();
t -= 700*24*60*60*1000;
Date then = new Date(t);
System.out.println("Siedemset dni temu był: " + then);
// Siedemset dni temu był: Tue Apr 05 22:21:30 CEST 2005
//2
Calendar now = Calendar.getInstance();
SimpleDateFormat f = new SimpleDateFormat ("E yyyy.MM.dd
'godz.' hh:mm:ss a zzz");
System.out.println("Dzi jest " + f.format(now.getTime()));
// Dzi jest So 2005.04.09 godz. 11:45:36 PM CEST
now.add(Calendar.DAY_OF_YEAR, - (365 * 2));
System.out.println("Ponad dwa lata temu był: " +
f.format(now.getTime()));
// Ponad dwa lata temu był:
// Cz 2003.04.10 godz. 11:45:36 PM CEST
//3 odst p od roku 2000
Date d1 = new GregorianCalendar(1999,11,31,23,59).getTime();
//poczatek roku2000
Date d2 = new Date(); //data dzisiejsza
// wyra amy ka d z dat w formie milisekund i odejmujemy
long diff = d1.getTime() - d2.getTime();
System.out.println("Ró nica wynosi " + (diff /
(1000*60*60*24)) + " dni.");
// Ró nica wynosi -1925 dni.
•
porównywanie dat
DateFormat df = new SimpleDateFormat ("yyyy-MM-dd");
Date d1 = df.parse(“2004-10-14”);
Date d2 = df.parse(“2003-04-05”);
String relation;
if (d1.equals(d2)) relation = "to ta sama data co";
else if (d1.before(d2)) relation = "wypada przed";
else relation = "wypada po";
System.out.println(d1 + " " + relation + " " + d2);
// Thu Oct 14 00:00:00 CEST 2004 wypada po
// Sat Apr 05 00:00:00 CEST 2003
java
/data
6
•
okre lenie numeru dnia itp. wyznaczonego przez dat
stałe z klasy
java.util.Calendar, które mo na u y :
ERA, YEAR, MONTH, WEEK_OF_YEAR, WEEK_OF_MONTH, DATE,
DAY_OF_MONTH, DAY_OF_YEAR, DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH,
AM_PM, HOUR, HOUR_OF_DAY, MINUTE, SECOND, MILLISECOND,
ZONE_OFFSET, DST_OFFSET (przesuni cie czasu letniego i
zimowego)
Calendar c = new GregorianCalendar();
Date timeNow = new Date();
c.setTime(timeNow); // ustawiamy dat i czas w kalendarzu
System.out.println("bie
cy tydzie roku: " +
c.get(Calendar.WEEK_OF_YEAR));
// bie
cy tydzie roku: 14