Что такое хороший, простой способ вычислить недельное число ISO 8601?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

17
задан Basil Bourque 25 May 2014 в 07:21
поделиться

4 ответа

Я полагаю, что можно использовать Календарный объект (просто устанавливает FirstDayOfWeek на понедельник и MinimalDaysInFirstWeek к 4, чтобы заставить его выполнять ISO 8601), и вызов добираются (Календарь. WEEK_OF_YEAR).

14
ответ дан 30 November 2019 в 10:43
поделиться

Joda-разовая библиотека имеет календарь ISO8601 и обеспечивает эту функциональность:

http://joda-time.sourceforge.net/cal_iso.html

yyyy-Www-dTHH:MM:SS.SSS Этот формат ISO8601 имеет следующие поля:

* four digit weekyear, see rules below
* two digit week of year, from 01 to 53
* one digit day of week, from 1 to 7 where 1 is Monday and 7 is Sunday
* two digit hour, from 00 to 23
* two digit minute, from 00 to 59
* two digit second, from 00 to 59
* three decimal places for milliseconds if required

Недели всегда завершены, и первая неделя года является той, которая включает первый четверг года. Это определение может означать, что первая неделя года запускается в предыдущем году, и на прошлой неделе заканчивается в следующем году. weekyear поле определяется для обращения к году, который владеет неделей, которая может отличаться с фактического года.

результат всех то есть, что Вы создаете объект DateTime и звоните скорее смутно (но логически) названный getWeekOfWeekyear (), где weekyear является конкретным основанным на неделе определением года, используемого ISO8601.

В целом, joda-разовый фантастически полезный API, я прекратил использовать java.util. Календарь и java.util. Дата полностью, за исключением того, когда я должен взаимодействовать через интерфейс с API, который использует их.

8
ответ дан 30 November 2019 в 10:43
поделиться

Если Вы хотите быть на новейшем, можно взять последнее отбрасывание кодовой базы JSR-310 (API Времени Даты), который является во главе с Stephen Colebourne (Известности Joda). Это - быстрый интерфейс и является эффективно восходящей модернизацией Joda.

1
ответ дан 30 November 2019 в 10:43
поделиться

обратное: даёт дату понедельника недели (в perl)

use POSIX qw(mktime);
use Time::localtime;

sub monday_of_week {
    my $year=shift;
    my $week=shift;
    my $p_date=shift;

    my $seconds_1_jan=mktime(0,0,0,1,0,$year-1900,0,0,0);
    my $t1=localtime($seconds_1_jan);
    my $seconds_for_week;
    if (@$t1[6] < 5) {
#first of january is a thursday (or below)
        $seconds_for_week=$seconds_1_jan+3600*24*(7*($week-1)-@$t1[6]+1);
    } else {
        $seconds_for_week=$seconds_1_jan+3600*24*(7*($week-1)-@$t1[6]+8);
    }
    my $wt=localtime($seconds_for_week);
    $$p_date=sprintf("%02d/%02d/%04d",@$wt[3],@$wt[4]+1,@$wt[5]+1900);
}

-2
ответ дан 30 November 2019 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: