Сложные манипуляции с Java / Groovy Date - PullRequest
2 голосов
/ 11 марта 2011

У меня есть несколько дат, отформатированных с указанием года и недели, следующим образом:

2011-10

Значение недели - это неделя года (т. Е. 1-52). Из значения этой недели мне нужно вывести что-то вроде следующего:

Mar 7

В явном виде мне нужен месяц, в котором находится данная неделя, и дата первого понедельника этой недели. Другими словами, это говорит о том, что 10-я неделя года - это неделя 7-го марта.

Я использую Groovy. Какие манипуляции с датами я могу сделать, чтобы заставить это работать?

Ответы [ 4 ]

1 голос
/ 12 марта 2011

Вот отличное решение:

use(groovy.time.TimeCategory) {
    def (y, w) = "2011-10".tokenize("-")
    w = ((w as int) + 1) as String
    def d = Date.parse("yyyy-w", "$y-$w") + 1.day
    println d.format("MMM dd")
}
1 голос
/ 11 марта 2011

Вы можете использовать SimpleDateFormat , как в Java.См. groovyconsole.appspot.com / script / 439001

java.text.DateFormat df = new java.text.SimpleDateFormat('yyyy-w', new Locale('yourlocale'))
Date date = df.parse('2011-10')

Чтобы добавить неделю, просто используйте Date date = df.parse('2011-10')+7

Вам не нужно устанавливать языковой стандартесли в качестве локали по умолчанию используется понедельник в качестве первого дня недели.

1 голос
/ 11 марта 2011
Date date = new SimpleDateFormat("yyyy-w", Locale.UK).parse("2011-10");
System.out.println(new SimpleDateFormat("MMM d").format(date));

Первая строка возвращает первый день 10-й недели в Британской локали (7 марта).Когда Locale не применяется, результаты зависят от JVM по умолчанию Locale.

Форматы объясняются здесь .

1 голос
/ 11 марта 2011

Используйте GregorianCalendar (или Joda, если вы не возражаете против зависимости)

    String date = "2011-10";
    String[] parts = date.split("-");
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, Integer.parseInt(parts[0]));
    cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    cal.set(Calendar.WEEK_OF_YEAR, Integer.parseInt(parts[1])+1);
    DateFormat df = new SimpleDateFormat("MMM d");
    System.out.println(df.format(cal.getTime()) + " (" + cal.getTime() + ")");

РЕДАКТИРОВАТЬ: добавлено +1 к неделе, так как календарь использует номера недели, начинающиеся с нуля

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