Если Вы хотите получить будущую дату, почему Вы не можете только получить текущую дату и использовать sed/awk/etc?

Насколько я знаю, это не возможно, поскольку Firefox не принимает, что команды управляют окном. Это - также (главным образом) ответственность менеджера окон, таким образом, я сомневаюсь, что когда-либо будут параметры, чтобы сделать это. Однако можно управлять окном с wmctrl, но это будет немного трудным:

#!/usr/bin/env bash

firefox -new-instance -new-window "http://www.reddit.org" &

# Process ID of the process we just launched
PID=$!

# Window ID of the process...pray that there's     
# only one window! Otherwise this might break.
# We also need to wait for the process to spawn
# a window.
while [ "$WID" == "" ]; do
        WID=$(wmctrl -lp | grep $PID | cut "-d " -f1)
done
# Set the size and location of the window
# See man wmctrl for more info
wmctrl -i -r $WID -e 0,50,50,250,250

Могли бы быть более умные способы сделать это, и существуют некоторые проблемы совместимости с Firefox (например, что никакой другой экземпляр не работает), но это должно получить Вас движение.

0
13.04.2017, 15:36
3 ответа

В основном Вы можете, но не быть достаточно портативными, может перестать работать, и это - больше усилия в конце дня.

Позвольте говорят, что я хочу использовать awk увеличить минуты 3. (Я проигнорирую, что, если это больше, чем 59, я должен сбросить к 00 на данный момент):

$ date
Mon Sep 16 22:52:42 AST 2013
$ date | awk -F: '{printf $1 ":" ; printf $2+3 ":" ; print $3}'
Mon Sep 16 22:55:43 AST 2013

Хороший там. Но теперь я должен разработать функцию, что каждый раз, когда минуты достигают 59, она сбрасывает к 00. Не хороший больше. Следовательно предпочтен естественные способы увеличить время вместо того, чтобы анализировать текст.

3
28.01.2020, 02:13
  • 1
    , Это портативно (просто не забывают использовать независимый от локали формат даты или устанавливать LC_TIME=C). Но чрезвычайно трудно разобраться, после того как часовые пояса начинают принимать участие, и большинство программистов понимает его превратно, даже когда только даты под угрозой (руки повышения, кто не видел программы, которые рассматривают 2000 как невисокосный год или 2100 как високосный год). –  Gilles 'SO- stop being evil' 18.09.2013, 00:35
  • 2
    Для этого я сказал "достаточно портативное" подразумевать, что Вы имеете к ожидаемому обходному решению (и неожиданный) ситуации. –  Braiam 18.09.2013, 01:05

Вы можете, но это становится сложным. Если у Вас есть дата в простые секунды, например, секунды, которые протекли с полуночи четверг, 1 января 1970 (время POSIX), относительно легко добавить минуту к нему:

$ date +%s
1379385111
$ date +%s | awk '{print "Current time is",$1,"soon will be", $1+60}'
Current time is 1379385275 soon will be 1379385335

Хорошо и хороший, но что, если Вы хотите сделать это с человекочитаемыми временами? Что, если Вы хотите добавить 4 месяца и 2 недели? Вычисление, которое в секундах боль и интерпретация такой даты, не легко также. Например, что делает дата 411174000 represent1?

Как Вы увеличили бы Sun 12 Dec 1936 на, скажем, 3 недели? Это - удивительно тернистая проблема, если Нельзя пользоваться библиотеками управления датой. Думайте о преобразовании всех дат к секундам и затем добавлению, примите во внимание, что несколько месяцев имеют 30 дней, другие 31, уже не говоря о феврале и високосных годах. Это действительно не тривиальная проблема. Вот почему большинство языков программирования имеет библиотеки управления датой (Perl, например, или C).

Вдобавок к этому, date может иметь дело с датами как tomorrow или Oct 18 2017 и может добавить и вычесть их и возвратить человекочитаемую дату вместо строки цифр.

Начиная со стандарта date программа делает это настолько легче, почему мы должны пойти и изобрести велосипед?

1 это - среда Jan 12 0:00:00 CET 1983

6
28.01.2020, 02:13

Управление временами и датами с чем-либо кроме хорошо продуманной библиотеки является просто плохой идеей. То, что, казалось бы, было бы тривиальной проблемой, может быстро превратиться в одну из главной сложности с проблемами, такими как время сбережений дневного света, високосные годы, секунды прыжка, часовые пояса и т.д.

Программисты постоянно думают, "О, я могу просто сделать быструю функцию или два, чтобы сделать это", и Вы не должны оглядываться назад слишком далеко к недавнему инциденту, где разработчики Apple думали это и правильно не имели дело с переходами сбережений дневного света правильно.

выборка

Сбережения Дневного света (DST), запущенный в США несколько часов назад, когда часы продвинулись с 1:59 до 3:00.

Однако некоторые пользователи iPhone сообщают обо всех видах проблем с изменениями DST.

Отчеты TUAW:

Несколько читателей сообщают, что вместо того, чтобы перейти вперед час вчера вечером как ожидалось, их часы iPhone на самом деле переключились на нижний регистр, неправильное направление — поддерживают час — потому что автоматическая корректировка часового пояса пошла wonky. У читателя в Нэшвилле есть телефон, который думает, что он находится по Горному времени; читатель в телефоне Флориды убежден, что это должно быть на Чикагском времени. Наш коллега Mel Martin живет в Аризоне, которая главным образом не наблюдает DST вообще; тем не менее, его телефон (который имел автоматические установки часового пояса и настройки местоположения на) неправильно перешел вперед один час.

НИЖНЯЯ СТРОКА

Не соблазняйтесь очевидной простотой проблемы, пользуйтесь библиотекой!

5
28.01.2020, 02:13

Теги

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