Форум сайта python.su
Здравствуйте.
Пожалуйста , просьба меня не наказывать
Помощь мне № 1
Хочется чем проще , тем лучше , таймер обратного отчета до Нового Года , при этом Год формируется автоматически , то есть:
1) если запустить скрипт в 2017 Году - будет отсчет до 2018 Года
2) если запустить скрипт в 2018 Году - будет отсчет до 2019 Года
До Нового , 2018 Года , осталось :
Дней : XX ; Часов : XX ; Минут : XX ; Секунд : XX
Числа ХХ имеют двузначный формат в виде strtime
%d Двухзначное представление дня месяца (с ведущими нулями) , От 01 до 31
%H Двухзначный номер часа в 24-часовом формате , От 00 до 23
%M Двухзначный номер минуты , От 00 до 59
%S Двухзначный номер секунды , От 00 до 59
Ниже есть код , но , предполагаю , таймер отбратного отсчета реализован много строк , хочется чем проще , тем лучше , тем более
Код ниже , возможно несовпадение секунд обратного отсчета , хочется как время в питон идет вперед - модуль localtime(time) , с тем же шагом время идет назад - для обратного отсчета
text = "" nexttime = time() ct = localtime(nexttime) new_year = str(ct.tm_year + 1) new_year_time = mktime(strptime(new_year, "%Y")) title_text = _("До Нового , %s Year , осталось :") % new_year remaining = int(math.floor(new_year_time - nexttime)) if remaining > 0: text += _("%s\n") % (title_text) text += str(datetime.timedelta(seconds=remaining))
days = "день" if ((day>1 && day<5) || (day>21 && day<25) || (day>31 && day<35) || (day>41 && day<45) || (day>51 && day<55)) {days = "дня"} if ((day>4 && day<21) || (day>24 && day<31) || (day>34 && day<41) || (day>44 && day<51) || day==0) {days = "дней"} hours = "час" if ((hour>1 && hour<5) || hour>21) {hours = "часа"} if ((hour>4 && hour<21) || hour==0) {hours = "часов"} mins = "минута" if ((min>1 && min<5) || (min>21 && min<25) || (min>31 && min<35) || (min>41 && min<45) || (min>51 && min<55)) {mins = "минуты"} if ((min>4 && min<21) || (min>24 && min<31) || (min>34 && min<41) || (min>44 && min<51) || min>54 || min==0) {mins = "минут"} secs = "сек." /*if ((sec>1 && sec<5) || (sec>21 && sec<25) || (sec>31 && sec<35) || (sec>41 && sec<45) || (sec>51 && sec<55)) {secs = "секунды"} if ((sec>4 && sec<21) || (sec>24 && sec<31) || (sec>34 && sec<41) || (sec>44 && sec<51) || sec>54 || sec==0) {secs = "секунд"} */
Отредактировано SharkyEXE (Дек. 10, 2017 15:27:18)
Офлайн
>>> from datetime import datetime >>> now = datetime.now() >>> ny = datetime(now.year,12,31,23,59,59) >>> delta = ny - now >>> delta.days,delta.seconds//3600,delta.seconds%60 (21, 7, 49) >>>
Офлайн
vic57
Здравствуйте.
А что по поводу вывода delta в формате
strtime
%d Двухзначное представление дня месяца (с ведущими нулями) , От 01 до 31
%H Двухзначный номер часа в 24-часовом формате , От 00 до 23
%M Двухзначный номер минуты , От 00 до 59
%S Двухзначный номер секунды , От 00 до 59
Типа так
04 07 05 01
где
04 - дней
07 - часов
05 - минут
01 - секунд
Офлайн
delta - timedelta идет в формате (days,seconds,microseconds)
можете все вычислить сами
Офлайн
vic57
Я не про то.
Даже если delta days будет возвращаться как 1 , то мне нужен вывод как 01 - двузначный вывод
Делить, умножать и прочее - этов се понятно.
Интересует именно двузначный формат вывода
Офлайн
>>> now = datetime.now() >>> now datetime.datetime(2017, 12, 10, 17, 18, 57, 145953) >>> delta = datetime(2017,12,31,23,59,59) -now >>> delta datetime.timedelta(21, 24061, 854047) >>> sec = delta.seconds >>> h = sec//3600 >>> m = (sec//60)%60 >>> s = sec%60 >>> h,m,s (6, 41, 1) >>> '{:02d} {:02d} {:02d}'.format(h,m,s) '06 41 01 >>>
Отредактировано vic57 (Дек. 10, 2017 16:36:50)
Офлайн
Интересует именно двузначный формат вывода
In [1]: '{:0>2}'.format(1) Out[1]: '01' In [2]: '{:0>2}'.format(11) Out[2]: '11'
Офлайн
ajib6ept
Здравствуйте.
А по поводу динамичных окончаний что подскажите, пожалуйста , Помощь мне № 2 тынц
Офлайн
Стандартными вряд ли, есть pytils, он что-то похожее делает
>>> pytils.numeral.get_plural(0, u"гвоздь, гвоздя, гвоздей") u'0 гвоздей' >>> pytils.dt.distance_of_time_in_words(time.time()-10000) u'2 часа назад' >>> pytils.dt.distance_of_time_in_words(datetime.datetime.now()+datetime.timedelta(0,10000), accuracy=2) u'через 2 часа 46 минут'
Офлайн
ajib6ept
А если в коде прописать что-то вроде этого
days = "день"
if ((day>1 && day<5) || (day>21 && day<25) || (day>31 && day<35) || (day>41 && day<45) || (day>51 && day<55)) {days = "дня"}
if ((day>4 && day<21) || (day>24 && day<31) || (day>34 && day<41) || (day>44 && day<51) || day==0) {days = "дней"}
hours = "час"
if ((hour>1 && hour<5) || hour>21) {hours = "часа"}
if ((hour>4 && hour<21) || hour==0) {hours = "часов"}
mins = "минута"
if ((min>1 && min<5) || (min>21 && min<25) || (min>31 && min<35) || (min>41 && min<45) || (min>51 && min<55)) {mins = "минуты"}
if ((min>4 && min<21) || (min>24 && min<31) || (min>34 && min<41) || (min>44 && min<51) || min>54 || min==0) {mins = "минут"}
secs = "сек."
/*if ((sec>1 && sec<5) || (sec>21 && sec<25) || (sec>31 && sec<35) || (sec>41 && sec<45) || (sec>51 && sec<55)) {secs = "секунды"}
if ((sec>4 && sec<21) || (sec>24 && sec<31) || (sec>34 && sec<41) || (sec>44 && sec<51) || sec>54 || sec==0) {secs = "секунд"} */
Офлайн