Как изобразить дату в Java - PullRequest
2 голосов
/ 10 июня 2019

Я хотел бы иметь простой класс Date с атрибутами месяц, год и день.

Я хочу, чтобы объект Date был включен в объект Magazine, чтобы я мог знать, когда был опубликован журнал..

когда я пытаюсь использовать объект Date из класса Date, как показано ниже Date d1 = new Date (1,1,1);Дата с новой даты была зачеркнута, показывая, что она устарела.Я читал о новом конструкторе, заменив его, но он выглядит очень запутанным.Я не понимаю, как сделать это с помощью класса Calendar.Если это возможно, я не хочу создавать свой собственный класс Date ... Пожалуйста, помогите мне.Спасибо

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

ТЛ; др

Я хочу, чтобы объект Date был включен в объект Magazine, чтобы я мог знать, когда был опубликован журнал.

Поэтому добавьте переменную-член типа java.time.LocalDate.

package work.basil.example;

import java.time.LocalDate;

public class Magazine
{
    // Member variables.
    public LocalDate published ;

    // Constructor.
    public Magazine ( LocalDate published )
    {
        this.published = published;
    }
}

Чтобы использовать это:

Magazine m = new Magazine( LocalDate.of( 2019 , Month.JANUARY , 23 ) ) ;

LocalDate

  • Современный подход использует LocalDate.
  • Никогда не используйте java.util.Date или java.sql.Date.

Класс LocalDate представляет значение только для даты без времени суток и без часового пояса или смещения от UTC .

Часовой пояс имеет решающее значение при определении даты. В любой момент времени дата меняется по всему земному шару в зависимости от зоны. Например, через несколько минут после полуночи в Париж Франция - это новый день, а еще «вчера» в Монреаль Квебек .

Если часовой пояс не указан, JVM неявно применяет свой текущий часовой пояс по умолчанию. Это значение по умолчанию может измениться в любой момент во время выполнения (!), Поэтому ваши результаты могут отличаться. Лучше явно указать желаемый / ожидаемый часовой пояс в качестве аргумента. Если критично, подтвердите зону с вашим пользователем.

Укажите собственное имя часового пояса в формате Continent/Region, например America/Montreal, Africa/Casablanca или Pacific/Auckland. Никогда не используйте 2-4 буквенные сокращения, такие как EST или IST, так как они не истинные часовые пояса, не стандартизированы и даже не уникальны (!).

ZoneId z = ZoneId.of( "America/Montreal" ) ;  
LocalDate today = LocalDate.now( z ) ;

Если вы хотите использовать текущий часовой пояс JVM по умолчанию, запросите его и передайте в качестве аргумента. Если опущен, код становится неоднозначным для чтения, поскольку мы не знаем наверняка, намеревались ли вы использовать значение по умолчанию или если вы, как и многие программисты, не знали о проблеме.

ZoneId z = ZoneId.systemDefault() ;  // Get JVM’s current default time zone.

Или укажите дату. Вы можете установить месяц по номеру, с нормальным номером 1-12 для января-декабря.

LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ;  // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.

Или, лучше, использовать предварительно определенные объекты перечисления Month, по одному на каждый месяц года. Совет: используйте эти Month объекты по всей вашей кодовой базе, а не просто целое число, чтобы сделать ваш код более самодокументируемым, обеспечить допустимые значения и обеспечить type-safety . То же самое для Year & YearMonth.

LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;

Table of Java date-time types, both modern and legacy.


О java.time

Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .

Проект Joda-Time , теперь в режиме обслуживания , рекомендует выполнить переход на классы java.time .

Вы можете обмениваться java.time объектами напрямую с вашей базой данных. Используйте драйвер JDBC , совместимый с JDBC 4.2 или более поздней версии. Нет необходимости в строках, нет необходимости в java.sql.* классах.

Где получить классы java.time?

Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval, YearWeek, YearQuarter и more .

0 голосов
/ 10 июня 2019

«Устаревший» относится к функциям или элементам, которые находятся в процессе замены на более новые.Устаревшие элементы могут работать в текущей версии языка программирования, они могут не работать в будущих обновлениях.

Но вы можете игнорировать и использовать его.

Пример:

String pattern = "yyyy-MM-dd";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date(1,1,1));
System.out.println(date);

Вывод:

1901-02-01

Но если вы не хотите использовать устаревшие методы, вы можете перейти к LocalDate:

LocalDate localDate = LocalDate.of(2019, 1, 1);
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
String formatted = localDate.format(dateTimeFormatter);
System.out.println(formatted);

Вывод:

2019-01-01
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...