Java. Урок 34. Дата и время

Уроки для начинающих   25 Февраль 2013  Автор статьи:  

Для удобной работы с датой и временем в Java используются классы Calendar и Date. Оба класса находятся в библиотеке java.util. Начнем знакомство с датой. Класс Date хранит время в миллисекундах начиная с 1 января 1970 года. Данный класс имеет конструктор по умолчанию, который возвращает текущее время. Кроме этого можно создать объект Date используя конструктор, который принимает количество миллисекунд начиная с 1 января 1970 года. Для получения этого внутреннего времени используется метод getTime(). Кроме этого уже после создания можно изменить время с помощью setTime(long date).
Для того, чтобы отображать дату и время в удобном для вас формате используется SimpleDataFormat:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
package ru.cybern;

import java.text.SimpleDateFormat;
import java.util.Date;
public class Test {
    public void test()
    {
        Date d = new Date();
        SimpleDateFormat format1 = new SimpleDateFormat("dd.MM.yyyy hh:mm");
        SimpleDateFormat format2 = new SimpleDateFormat("День dd Месяц MM Год yyyy Время hh:mm");
        System.out.println(format1.format(d)); //25.02.2013 09:03
        System.out.println(format2.format(d)); //День 25 Месяц 02 Год 2013 Время 09:03
    }
}

Очевидно, что при создании шаблона для отображения даты dd — означает день, MM — месяц, yyyy — год, hh — часы и mm — минуты. В шаблоне могут присутствовать не все единицы, кроме того как вы увидели выше в качестве разделитель можно использовать любой текст.
Рассмотрим абстрактный класс Calendar. Он позволяет работать с датой в рамках календаря, т.е он умеет прибавлять день, при этом учитывать високосные годы и прочее. Единственной реализацией его является класс GregorianCalendar, также как и у даты конструктор по умолчанию возвращает календарь на текущий день, но вы можете задать его явно указав все параметры:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Test {
    public void test()
    {
        Calendar c = new GregorianCalendar();//календарь на текущую дату
        Calendar c2 = new GregorianCalendar(2013, 11, 25);//календарь на 25.11.2013
        c2.add(Calendar.DAY_OF_YEAR, 1); //увеличиваем дату на 1 день
        System.out.println(c2.getTime());// 26.11.2013
        c2.add(Calendar.DAY_OF_YEAR, -1); //уменьшаем дату на 1 день
    }
}

Календарь достаточно мощный класс, который позволяет получать названия месяцев и дней недели, увеличивать или уменьшать различные параметры текущей даты, а также получать их. Для удобства работы с ними вам нужно просто разобраться с типами данных с которыми он работает:

  • DAY_OF_YEAR — день года (0- 365)
  • DAY_OF_MONTH — день месяца( какой по счету день в месяце 0 — 31)
  • WEEK_OF_MONTH — неделя месяца
  • WEEK_OF_YEAR — неделя в году
  • MONTH — номер месяца
  • Year — номер года
  • Calendar.ERA — эра

Т.е большинство методов принимает на вход Int field, где в качестве одного из вариантов вы можете выбрать перечисленные выше значения.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package ru.cybern;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class Test {
    public void test()
    {
        Calendar c = new GregorianCalendar(2013, 11, 25);//календарь на 25.11.2013
        System.out.println(c.get(Calendar.MONTH));//11
        System.out.println(c.get(Calendar.YEAR));//2013
        System.out.println(c.get(Calendar.DAY_OF_WEEK_IN_MONTH));//4
        System.out.println(c.get(Calendar.DAY_OF_WEEK));//4
        System.out.println(c.get(Calendar.DAY_OF_YEAR));//359
        System.out.println(c.get(Calendar.DAY_OF_MONTH));//25
    }
}

  • saiko

    Calendar c2 = new GregorianCalendar(2013, 11, 25);//календарь на 25.11.2013
    Это неправильно, так как нумерация месяцев начинается с 0.

  • bulletproof

    ачепятка «Для того, чтобы отображать дату и время в удобном для вас формате используется SimpleDataFormat:» надо SimpleDateFormat.

Научиться программировать

  • на Delphi

  • на Java

  • на C++