Найти - Пользователи
Полная версия: Таймер обратного отсчета Новый Год
Начало » Центр помощи » Таймер обратного отсчета Новый Год
1 2
SharkyEXE
Здравствуйте.

Пожалуйста , просьба меня не наказывать

Помощь мне № 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))

Помощь мне № 2

Да , очень хочется один раз и на всю жизнь , динамического изменения окончаний , мол

День : 01
Дня : 02
Дней : 29

Час : 01
Часа : 02
Часов : 13

Минута : 01
Минуты : 02
Минут : 07

Секунда : 01
Секунды : 02
Секунд : 28

Примерный код ниже

 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 = "секунд"} */

Рад буду как Помощь мне № 1 и/или Помощь мне № 2

Спасибо.
vic57
 >>> 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)
>>> 
SharkyEXE
vic57

Здравствуйте.

А что по поводу вывода delta в формате

strtime
%d Двухзначное представление дня месяца (с ведущими нулями) , От 01 до 31
%H Двухзначный номер часа в 24-часовом формате , От 00 до 23
%M Двухзначный номер минуты , От 00 до 59
%S Двухзначный номер секунды , От 00 до 59

Типа так

04 07 05 01

где
04 - дней
07 - часов
05 - минут
01 - секунд
vic57
delta - timedelta идет в формате (days,seconds,microseconds)
можете все вычислить сами
SharkyEXE
vic57

Я не про то.

Даже если delta days будет возвращаться как 1 , то мне нужен вывод как 01 - двузначный вывод

Делить, умножать и прочее - этов се понятно.

Интересует именно двузначный формат вывода
vic57
 >>> 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
>>> 
ajib6ept
Интересует именно двузначный формат вывода


Через формат можно задать минимальную длинну

 In [1]: '{:0>2}'.format(1)
Out[1]: '01'
In [2]: '{:0>2}'.format(11)
Out[2]: '11'
SharkyEXE
ajib6ept

Здравствуйте.

А по поводу динамичных окончаний что подскажите, пожалуйста , Помощь мне № 2 тынц
ajib6ept
Стандартными вряд ли, есть 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 минут'
SharkyEXE
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 = "секунд"} */
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB