Интерпретация строк даты с правильной локалью (Bash, date) [duplicate]

Если таблицы cols и значения являются переменными, то существует два способа:

С двойными кавычками "" полный запрос:

$query = "INSERT INTO $table_name (id, $col1, $col2)
                 VALUES (NULL, '$val1', '$val2')";

Или

 $query = "INSERT INTO ".$table_name." (id, ".$col1.", ".$col2.")
               VALUES (NULL, '".$val1."', '".$val2."')";

С одинарными кавычками '':

$query = 'INSERT INTO '.$table_name.' (id, '.$col1.', '.$col2.')
             VALUES (NULL, '.$val1.', '.$val2.')';

Использовать обратные тики ``, когда имя столбца / значения похоже на зарезервированное ключевое слово MySQL.

Примечание: Если вы указываете имя столбца с именем таблицы, используйте обратные тики следующим образом:

`table_name`. `column_name` & lt; - Примечание: исключить . из обратных тиков.

8
задан 12 revs 29 December 2013 в 05:35
поделиться

4 ответа

Почему вы не сохраняете время как unixtime (т.е. миллисекунды с 1-го января 1970 года) Как 1388198714?

Запрошенное упражнение при попытке проанализировать все форматы дат со всего мира как сценарий с одним выстрелом bash без разумных зависимостей немного смешон.

5
ответ дан claj 25 August 2018 в 10:29
поделиться

Вы можете использовать libdatetime-format-flexible-perl.

#!/usr/bin/perl
use DateTime::Format::Flexible;
my $date_str = "So 22 Dez 2013 07:29:35 CET";
$parser = DateTime::Format::Flexible->new;
my $date = $parser->parse_datetime($date_str);
print $date

Выход по умолчанию будет 2013-12-22T07:29:35, но поскольку $date не является регулярной строкой, а объектом, вы можете сделать что-то вроде этого:

printf '%02d.%02d.%d', $date->day, $date->month, $date->year;

Также поведение date, вероятно, следует рассматривать как ошибку. Я так думаю, потому что дата в том же формате, но по-русски правильно разбирается.

$ export LC_TIME=ru_RU.UTF-8
$ NOW="$(date "+%c")"
$ date --date="$NOW" '+%d.%m.%Y'
22.12.2013

1
ответ дан Dmitry Alexandrov 25 August 2018 в 10:29
поделиться

Невозможно с --date с GNU coreutils 8.22. Из руководства по дате:

'- d datestr'

'- date = datestr'

Показывать дату и время, указанные в datestr вместо текущей даты и времени. datestr может быть практически в любом распространенном формате. Он может содержать месячные имена, часовые пояса, «am» и «pm», «вчера» и т. Д. Например, --date = "2004-02-27 14: 19: 13.489392193 +0530" указывает момент времени, который составляет 489 392 193 наносекунды после 27 февраля 2004 года в 2:19:13 в часовом поясе, который составляет 5 часов и 30 минут к востоку от UTC.

Примечание: вход в настоящий момент должен быть в формате, не зависящем от локали. Например, для распечатки верной даты во многих локалях требуется LC_TIME = C:

date -d "$(LC_TIME=C date)"

http://www.gnu.org/software/coreutils/ manual / html_node / Options-for-date.html # Опции для даты

Обратите внимание, что формат ввода не может быть в определенном для локали формате.

Могут быть другие библиотеки или программы, которые распознают больше форматов даты, но для определенного формата даты нетрудно написать короткую программу для ее преобразования в то, что распознается датой (например, с Perl или awk).

7
ответ дан Gavin Smith 25 August 2018 в 10:29
поделиться

Если вы имели в виду неправильное форматирование, я думаю, , что вы хотите:

NOW=$(date +%c)
date --date="$NOW" +%d/%m/%Y

обратите внимание на нижний регистр %d и %m.

Локально, это то, что я получаю:

root@server2:~# NOW=$(date +%c)
root@server2:~# date --date="$NOW" +%d/%m/%Y
19/12/2013
0
ответ дан user2683246 25 August 2018 в 10:29
поделиться
Другие вопросы по тегам:

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