Это просто: 27 декабря 2015 года - день 1 недели 1 недели 2016 года (и 27 декабря 2026 года - день 1 недели 1 недели 2027 года). Это можно проверить, добавив следующие строки:
SimpleDateFormat odf = new SimpleDateFormat("YYYY-ww-u");
System.out.println(odf.format(d1));
System.out.println(odf.format(d2));
System.out.println(odf.format(d3));
Если SimpleDateFormat
выводит дату, он может использовать все поля: год, месяц, день, день недели, неделю месяца, неделю в году , недельный год и т. д.
При разборе SimpleDateFormat
ожидает соответствующий набор значений: день, месяц, год или день недели, неделю в году, в неделю-год. Поскольку вы поставляли недельный год, но не поставляли день недели и неделю в году, значения для значений принимались равными 1.
Фактические значения зависят от вашей локали:
(см. https: // docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html#week_and_year)
В моей системе (с использованием de-ch locale, с "EEE MMM dd HH: mm: ss zzz yyyy - YYYY-ww-u "как формат) Я получаю
Mo Jan 04 00:00:00 MEZ 2016 - 2016-01-1 Mo Jan 04 00:00:00 MEZ 2016 - 2016-01-1 Mo Jan 04 00:00:00 MEZ 2027 - 2027-01-1
Резервное копирование представлений для нескольких баз данных легко, просто используя information_schema:
mysql --skip-column-names --batch -e 'select CONCAT("DROP TABLE IF EXISTS ", TABLE_SCHEMA, ".", TABLE_NAME, "; CREATE OR REPLACE VIEW ", TABLE_SCHEMA, ".", TABLE_NAME, " AS ", VIEW_DEFINITION, "; ") table_name from information_schema.views'
Я хотел бы как можно более точно придерживаться вывода mysqldump , как запрашивал OP, поскольку он включает в себя множество информации о представлении, которое не может быть восстановлено простым запросом из INFORMATION_SCHEMA.
Вот как я создаю сценарий представления развертывания из моей исходной базы данных:
SOURCEDB="my_source_db"
mysql $SOURCEDB --skip-column-names -B -e \
"show full tables where table_type = 'view'" \
| awk '{print $1}' \
| xargs -I {} mysqldump $SOURCEDB {} > views.sql
Под резервным копированием я предполагаю, что вы имеете в виду просто определение без данных.
Похоже, что сейчас mysqldump не делает различий между ВИДАМИ и ТАБЛИЦАМИ, поэтому, возможно, лучше всего do заключается в том, чтобы либо явно указать представления в командной строке для mysqldump, либо вычислить этот список динамически перед mysqldump, а затем передать его, как и раньше.
Вы можете получить все представления в конкретной базе данных, используя этот запрос:
ПОКАЗАТЬ ПОЛНЫЕ ТАБЛИЦЫ, ГДЕ table_type = 'view';