Cloned DMOJ
This commit is contained in:
parent
f623974b58
commit
49dc9ff10c
513 changed files with 132349 additions and 39 deletions
90
judge/utils/timedelta.py
Normal file
90
judge/utils/timedelta.py
Normal file
|
@ -0,0 +1,90 @@
|
|||
import datetime
|
||||
|
||||
from django.utils.translation import npgettext, pgettext, ungettext
|
||||
|
||||
|
||||
def nice_repr(timedelta, display='long', sep=', '):
|
||||
"""
|
||||
Turns a datetime.timedelta object into a nice string repr.
|
||||
|
||||
display can be 'minimal', 'short' or 'long' [default].
|
||||
|
||||
>>> from datetime import timedelta as td
|
||||
>>> nice_repr(td(days=1, hours=2, minutes=3, seconds=4))
|
||||
'1 day, 2 hours, 3 minutes, 4 seconds'
|
||||
>>> nice_repr(td(days=1, seconds=1), 'minimal')
|
||||
'1d, 1s'
|
||||
"""
|
||||
|
||||
assert isinstance(timedelta, datetime.timedelta), 'First argument must be a timedelta.'
|
||||
|
||||
result = []
|
||||
|
||||
weeks = timedelta.days // 7
|
||||
days = timedelta.days % 7
|
||||
hours = timedelta.seconds // 3600
|
||||
minutes = (timedelta.seconds % 3600) // 60
|
||||
seconds = timedelta.seconds % 60
|
||||
|
||||
if display == 'simple-no-seconds':
|
||||
days += weeks * 7
|
||||
if days:
|
||||
if hours or minutes:
|
||||
return '%d day%s %d:%02d' % (days, 's'[days == 1:], hours, minutes)
|
||||
return '%d day%s' % (days, 's'[days == 1:])
|
||||
else:
|
||||
return '%d:%02d' % (hours, minutes)
|
||||
elif display == 'sql':
|
||||
days += weeks * 7
|
||||
return '%d %02d:%02d:%02d' % (days, hours, minutes, seconds)
|
||||
elif display == 'simple':
|
||||
days += weeks * 7
|
||||
if days:
|
||||
return '%d day%s %02d:%02d:%02d' % (days, 's'[days == 1:], hours, minutes, seconds)
|
||||
else:
|
||||
return '%02d:%02d:%02d' % (hours, minutes, seconds)
|
||||
elif display == 'localized':
|
||||
days += weeks * 7
|
||||
if days:
|
||||
return npgettext('time format with day', '%d day %h:%m:%s', '%d days %h:%m:%s', days) \
|
||||
.replace('%d', str(days)).replace('%h', '%02d' % hours).replace('%m', '%02d' % minutes) \
|
||||
.replace('%s', '%02d' % seconds)
|
||||
else:
|
||||
return pgettext('time format without day', '%h:%m:%s') \
|
||||
.replace('%h', '%02d' % hours).replace('%m', '%02d' % minutes).replace('%s', '%02d' % seconds)
|
||||
elif display == 'localized-no-seconds':
|
||||
days += weeks * 7
|
||||
if days:
|
||||
if hours or minutes:
|
||||
return npgettext('time format no seconds with day', '%d day %h:%m', '%d days %h:%m', days) \
|
||||
.replace('%d', str(days)).replace('%h', '%02d' % hours).replace('%m', '%02d' % minutes)
|
||||
return ungettext('%d day', '%d days', days) % days
|
||||
else:
|
||||
return pgettext('hours and minutes', '%h:%m').replace('%h', '%02d' % hours).replace('%m', '%02d' % minutes)
|
||||
elif display == 'concise':
|
||||
days += weeks * 7
|
||||
if days:
|
||||
return '%dd %02d:%02d:%02d' % (days, hours, minutes, seconds)
|
||||
else:
|
||||
return '%02d:%02d:%02d' % (hours, minutes, seconds)
|
||||
elif display == 'noday':
|
||||
days += weeks * 7
|
||||
hours += days * 24
|
||||
return '%02d:%02d:%02d' % (hours, minutes, seconds)
|
||||
elif display == 'minimal':
|
||||
words = ['w', 'd', 'h', 'm', 's']
|
||||
elif display == 'short':
|
||||
words = [' wks', ' days', ' hrs', ' min', ' sec']
|
||||
else:
|
||||
words = [' weeks', ' days', ' hours', ' minutes', ' seconds']
|
||||
|
||||
values = [weeks, days, hours, minutes, seconds]
|
||||
|
||||
for i in range(len(values)):
|
||||
if values[i]:
|
||||
if values[i] == 1 and len(words[i]) > 1:
|
||||
result.append('%i%s' % (values[i], words[i].rstrip('s')))
|
||||
else:
|
||||
result.append('%i%s' % (values[i], words[i]))
|
||||
|
||||
return sep.join(result)
|
Loading…
Add table
Add a link
Reference in a new issue