Я попытаюсь дать ответ на второй и третий вопрос, используя библиотеку Java, которая может стать частью Java 7.
javax.time. * (JSR 310)
Эти классы являются полной перепиской JodaTime, которая пытается исправить недостатки дизайна util.Date
/ util.Time
, а также JodaTime.
JSR 310 пытается предоставить всеобъемлющую модель для даты и времени, которая является типобезопасной и самодокументируемой. Он совместим с существующими классами, но также учитывает сценарии использования на основе XML и СУБД.
Классы являются окончательными, неизменяемыми, поточно-ориентированными и не могут быть изменены после создания. Экземпляры создаются с помощью богатого набора методов Factory, которые могут кэшировать объекты в фоновом режиме.
LocalDate dateToday = LocalDate.of(2010, 9, 14);
LocalDate oneMonthLater = dateToday.with(OCTOBER);
LocalDate oneYearLater = dateToday.withYear(2011);
API имеет несколько «машинно-ориентированных» классов и несколько «ориентированных на человека» классов:
Машинно-ориентированный
Instant
В течение времени, сопоставимого с меткой времени Unix или Java. На самом деле есть Instant
, TAIInstant
и UTCInstant
, которые позволяют людям точно выбирать, какое определение времени им нужно. I. е. «дневной», «линейный, без високосных секунд» и т. д.
Duration
Диапазон времени, не обязательно связанный с конкретной датой или календарем.
* 1 034 * Человек-ориентированный
Существует обширная коллекция классов, обрабатывающих различные варианты использования, такие как только дата, только время, время и дата, с часовыми поясами и без них, с летним временем и без него.
DateProvider
OffsetDate
, LocalDate
(, java.sql.Date
совместимость)
TimeProvider
OffsetTime
, LocalTime
(, java.sql.Time
совместимость)
DateTimeProvider
ZonedDateTime
, OffsetDateTime
, LocalDateTime
(, java.util.GregorianCalendar
совместимость)
InstantProvider
Instant
, ZonedDateTime
, OffsetDateTime
(, java.util.Date
совместимость)
Period
Периоды представляют промежуток времени, такой как «5 дней», который может быть добавлен и вычтен из даты / времени.
Matcher
Сопоставители разрешают запросы типа "эта дата в 2006 году?" или «этот день - последний день этого года».
Adjuster
Настройщики приходят на помощь, если вы хотите сделать более сложные изменения, такие как «Дайте мне последний день месяца!» или «Второй вторник после Рождества, пожалуйста!».
Resolver
Решатели позволяют пользователям определять, что должно произойти, если определенная дата недействительна, например, 31 февраля 2010 года:
DateResolver previous = DateResolvers.previousValid();
LocalDate date = date(2010, 2, 30, previous);
// date = 2010-02-28
Работа с данными о часовом поясе и летнем времени
Возможно сериализовать эти классы и десериализовать их, используя либо данные текущего часового пояса, либо данные часового пояса, когда они были сериализованы.
Кроме того, можно сравнивать правила из разных часовых поясов: можно узнать, изменились ли правила перехода на летнее время, e. г. между версиями 2010e и 2010f для дат в Лондоне или Москве и решить, что делать, если время находится в промежутке или перекрывается.
Календарные системы
Хотя все основано на ISO-8601 , предоставляются простые календари для систем времени на иврите, хиджре, японском, ThaiBuddist и т. Д.
Форматирование и анализ
toString()
возвращает ISO8601 и поддерживаются шаблоны, подобные приведенным в SimpleDateFormat
, и более продвинутые.
Интеграция
- Базы данных
- JodaTime
- Старые классы JDK (
java.util.*
)
- XML
Ссылки: