Преобразуйте минуты в неделю, используя классы Java Date и Calendar. - PullRequest
2 голосов
/ 18 июня 2009

Обзор

Это сценарий: мне дают значение, которое представляет часть общего количества минут, которые существуют в стандартной неделе (при условии, что 10 080 минут в неделю и 1440 минут в день), начиная с полуночи субботы (так 0 минут воскресенья @ 12 утра).

Мне нужно преобразовать это минутное значение в фактическое значение времени (например, 8:35 утра), и я хочу использовать Java-классы Date и / или Calendar, а не вычислять это вручную.

Пример

Ниже приведены некоторые примеры входных значений:

  • 720 (720 минут в неделю), поэтому 12:00 в воскресенье
  • 3840 (3840 минут в неделю), поэтому 16:00 во вторник

Используя Java-классы Date и Calendar, как мне получить компонент времени для этого относительного дня?

Ответы [ 4 ]

2 голосов
/ 18 июня 2009

Также с календарем действительно просто:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
int minutesToAdd = 720;
Calendar cal = Calendar.getInstance();

cal.setTime(dateFormat.parse("2009/06/21 00:00:00"));  // Next sunday
cal.add(Calendar.MINUTE, minutesToAdd);

Date result = cal.getTime();                           // Voila
1 голос
/ 18 июня 2009

Как это похоже на домашнее задание, вот как это должно работать:

1) Create yourself a calendar instance for sunday, 0:00 (on any date you wish)
2) Now add your minutes with the appropiate function
3) Now retrieve the time parts from the object
1 голос
/ 18 июня 2009

Разделите на 24 часа в день, чтобы получить количество дней. Остаток - количество минут в этом дне.

Разделите на 60, чтобы получить час. Остальные минуты в этом часе.

Деление и модуль получат ваш ответ всего за несколько строк кода. Поскольку это звучит как домашнее задание, я оставлю кодирование в этом ответе.

0 голосов
/ 18 марта 2017

ТЛ; др

LocalDate.now( ZoneId.of( "America/Montreal" ) )
         .with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) )
         .atStartOfDay( ZoneId.of( "America/Montreal" ) )
         .plus( Duration.ofMinutes( 720 ) )

Использование java.time

Современный способ - классы java.time.

Какая неделя? Я предполагаю, что вы хотите воскресенье текущей недели.

ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z );
LocalDate sundayThisWeek = today.with( TemporalAdjusters.previousOrSame( DayOfWeek.SUNDAY ) );

Получите первый момент этой даты. Не предполагайте, что означает 00:00:00, поскольку аномалии, такие как переход на летнее время (DST), могут означать другое время, например 01:00:00.

ZonedDateTime zdt = sundayThisWeek.atStartOfDay( z ); // First moment of the day.

Вы говорите, что вам вводится количество минут. Представьте это как Duration объект.

Duration duration = Duration.ofMinutes( x );

Добавьте объект Duration к объекту ZonedDateTime.

720 (720 минут в неделю), поэтому 12:00 в воскресенье

Нет, 720 минут могут привести к некоторому другому времени суток, например, к 11:00 или 13:00 в Соединенных Штатах в DST день перехода.

Объекты делают всю математику за вас и обрабатывают аномалии, такие как переход на летнее время.

ZonedDateTime zdtLater = zdt.plus( duration );

О java.time

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

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

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

Где взять классы java.time?

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

...