Skip to content

Instantly share code, notes, and snippets.

@righ
Last active August 29, 2015 14:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save righ/f5c960f92828e210d687 to your computer and use it in GitHub Desktop.
Save righ/f5c960f92828e210d687 to your computer and use it in GitHub Desktop.
# coding: utf-8
import re
_02 = (lambda s: '{0:0>2}'.format(s))
_03 = (lambda s: '{0:0>3}'.format(s))
MAP = {
'%a': r'(Sun|Mon|Tue|Wed|Thu|Fri|Sat)',
'%A': r'(Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday)',
'%w': r'([0-6]{1})',
'%d': r'({})'.format('|'.join(map(_02, range(1, 32)))),
'%b': r'(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)',
'%B': r'(January|February|March|April|May|June|July|August|September|October|November|December)',
'%m': r'({})'.format('|'.join(map(_02, range(1, 13)))),
'%y': r'(\d{2})',
'%Y': r'(\d{4})',
'%H': r'({})'.format('|'.join(map(_02, range(1, 25)))),
'%I': r'({})'.format('|'.join(map(_02, range(1, 13)))),
'%p': r'(AM|PM)',
'%M': r'({})'.format('|'.join(map(_02, range(1, 61)))),
'%S': r'({})'.format('|'.join(map(_02, range(1, 61)))),
'%s': r'(-?\d{1,12})',
'%f': r'(\d{6})',
'%z': r'([-+]\d{4})',
'%Z': r'(.{0}|[A-Z]{3})',
'%j': r'({})'.format('|'.join(map(_03, range(1, 367)))),
'%U': r'({})'.format('|'.join(map(_02, range(0, 53)))),
'%W': r'({})'.format('|'.join(map(_02, range(0, 53)))),
}
class CodeCannotConvert(Exception):
pass
def dtregexp_replace(s):
if re.search(r'(%c|%x|%X)', s):
raise CodeCannotConvert(s)
for a, b in MAP.items():
s = s.replace(a, b)
return s
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment