Преобразовать смещение часового пояса в целое число

Я нашел решение: Не был создан индекс файлов шрифтов X.

Я обнаружил это, просматривая /var/log/Xorg.0.log файл журнала.

$ grep /fonts /var/log/Xorg.0.log.old

[    13.492] (WW) The directory "/usr/share/fonts/Type1/" does not exist.
[    13.493] (WW) `fonts.dir' not found (or not valid) in "/usr/share/fonts/100dpi/".
[    13.493]    (Run 'mkfontdir' on "/usr/share/fonts/100dpi/").
[    13.493] (WW) `fonts.dir' not found (or not valid) in "/usr/share/fonts/75dpi/".
[    13.494]    (Run 'mkfontdir' on "/usr/share/fonts/75dpi/").
    /usr/share/fonts/misc/,
    /usr/share/fonts/TTF/,
    /usr/share/fonts/OTF/

Затем я запустил mkfontdir на /usr/share/fonts/75dpi и /usr/share/fonts/100dpi, и проблема была решена.

0
28.03.2018, 21:09
3 ответа

offset=$(date +%-z) даст результат -400в вашем случае.

-после символа %удаляет заполнение нулями.

[1] Соответствующий ответ

4
28.01.2020, 02:16

Использование sedиbc:

date +%z | sed -E 's/^([+-])(..)(..)/scale=2;0\1(\2 + \3\/60)/' | bc

Это вернет вас 2.00в часовой пояс, в котором я нахожусь(+0200).

Со странными/необычными часовыми поясами:

$ echo '+0245' | sed -E 's/^([+-])(..)(..)/scale=2;0\1(\2 + \3\/60)/' | bc
2.75

$ echo '-0245' | sed -E 's/^([+-])(..)(..)/scale=2;0\1(\2 + \3\/60)/' | bc
-2.75

Выражение sedпревратит часовой пояс в «bcскрипт». Для часового пояса +HHMMскрипт будет

scale=2;0+(HH + MM/60)

Для -HHMMбудет

scale=2;0-(HH + MM/60)

Ноль там, потому что мой bcне понимает унарный +.

Если вы собираетесь иметь дело только с полными часовыми поясами, вы можете использовать

date +%z | sed -E 's/^([+-])(..)../0\1\2/' | bc

который выдаст вам целые числа.

1
28.01.2020, 02:16

Если часовой пояс составляет целое число часов (Дата GNU):

$ date +%-:::z
-4

В противном случае (предположим -0427):

$ date +%-:::z | awk -F: '{x=$1;printf("%s%.2f\n",x>=0?"+":"-",(x>=0?x:-x)+$2/60)}'
-4.45

Или, для более старых реализаций с более ограниченной датой, используйте простой:

$ date +%z | awk -F '' '{printf("%s%.2f\n",$1,$2$3+($4$5)/60)}'
-4.45

Это все еще не POSIX, потому что нулевая FS не определена для POSIX awk.

Для POSIX нам нужно разделить символы с помощью sed:

$ date +%z |\
sed -E 's/(.)(..)(..)/\1 \2 \3/' |\
awk '{ printf("%s%.2f\n",$1,$2+$3/60) }'
1
28.01.2020, 02:16

Теги

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