Следующие работали для меня:
#1: clean up
sudo apt-get purge ibus
sudo apt-get install ibus
#2: reinstall (1)
# Settings > Language support > Install/remove language > Chinese (trad/simp)
#3: reinstall (2)
sudo apt-get install bus-table ubuntu-desktop unity-control-center unity-control-center-signon webaccounts-extension-common xul-ext-webaccounts
Утилита GNU date довольно хороша в этом. Он способен анализировать большое разнообразие форматов дат, а затем выводить их в другом формате. Здесь мы используем %s для вывода количества секунд с эпохи. Тогда простое арифметическое вычесть $now из $future и делить на 86400 секунд / день:
#!/bin/bash
read -p "enter the date in the format YYYY-MM-DD "
future=$(date -d "$REPLY" "+%s")
now=$(date "+%s")
echo "$(( ( $future / 86400 ) - ( $now / 86400 ) )) days"
Вот версия Ruby
require 'date'
puts "Enter a future date in format YYYY-MM-DD"
answer = gets.chomp
difference = (Date.parse(answer) - Date.today).numerator
puts difference > 1 ? "That day will come after #{difference} days" :
(difference < 0) ? "That day passed #{difference.abs} days ago" :
"Hey! That is today!"
Ниже приведен пример запуска скрипта ruby ./day-difference.rb (если вы сохранили его как day-difference.rb)
С будущей датой
$ ruby day-difference.rb
Enter a future date in format YYYY-MM-DD
2021-12-30
That day will come after 1848 days
С прошедшей датой
$ ruby day-difference.rb
Enter a future date in format YYYY-MM-DD
2007-11-12
That day passed 3314 days ago
Когда прошла сегодняшняя дата
$ ruby day-difference.rb
Enter a future date in format YYYY-MM-DD
2016-12-8
Hey! That is today!
Здесь хороший сайт для проверки различий даты http://www.timeanddate.com/date/duration.html
Вы можете попробовать что-то сделать в awk, используя функцию mktime
awk '{print (mktime($0) - systime())/86400}'
awk ожидает, что дата будет считаться со стандартного ввода в формате «YYYY MM DD HH MM SS» и затем печатает разницу между временем, и текущее время в днях.
mktime просто преобразует время (в заданном формате) на количество секунд от начала отсчета времени (1970-01-01 00:00:00 UTC); systime simple указывает текущее время в том же формате. Вычтите один из другого, и вы получите, как далеко друг от друга они находятся за считанные секунды. Разделите на 86400 (24 * 60 * 60), чтобы конвертировать в дни.
Существует пакет dateutils, который очень удобен для работы с датами. Подробнее о нем здесь github: dateutils
Установите его на
sudo apt install dateutils
Для вашей проблемы просто
dateutils.ddiff <start date> <end date> -f "%d days"
, где выход может быть выбран как секунды, минуты, часы, дни, недели, месяцы или годы. Его можно удобно использовать в сценариях, где вывод можно использовать для других задач.
Например,
dateutils.ddiff 2016-12-26 2017-05-12 -f "%m month and %d days"
4 month and 16 days
dateutils.ddiff 2016-12-26 2017-05-12 -f "%d days"
137 days
Вы можете использовать библиотеку awk Velor:
$ velour -n 'print (tm_date("2018-2-24") - tm_now()) / tm_day(1)'
6.27057
Или:
$ velour -n 'print (tm_date(ARGV[1]) - tm_now()) / tm_day(1)' 2018-2-24
6.27057