In [1]:
from __future__ import (absolute_import, division,
                        print_function, unicode_literals)
import datetime

In [2]:
# original taken from https://code.activestate.com/recipes/81611-roman-numerals/
def int_to_roman(input):
    """
    Convert an integer to Roman numerals.

    Examples:
    >>> int_to_roman(-1)
    Traceback (most recent call last):
    ValueError: Argument must be between 1 and 3999

    >>> int_to_roman(1.5)
    Traceback (most recent call last):
    TypeError: expected integer, got <type 'float'>

    >>> for i in range(0, 21): print int_to_roman(i)
    ...
    N
    I
    II
    III
    IV
    V
    VI
    VII
    VIII
    IX
    X
    XI
    XII
    XIII
    XIV
    XV
    XVI
    XVII
    XVIII
    XIX
    XX
    >>> print int_to_roman(2000)
    MM
    >>> print int_to_roman(1999)
    MCMXCIX
    """
    if type(input) != type(1):
        raise TypeError("expected integer, got %s" % type(input))
    if input == 0:
        return 'N'  # see https://en.wikipedia.org/wiki/Roman_numerals#Zero
    elif not 0 < input < 4000:
        raise ValueError("Argument must be between 1 and 3999")
    ints = (1000, 900,  500, 400, 100,  90, 50,  40, 10,  9,   5,  4,   1)
    nums = ('M',  'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')
    result = ""
    for i in range(len(ints)):
        count = int(input / ints[i])
        result += nums[i] * count
        input -= ints[i] * count
    return result

def roman_to_int(input):
    """
    Convert a roman numeral to an integer.
   
    >>> r = range(1, 4000)
    >>> nums = [int_to_roman(i) for i in r]
    >>> ints = [roman_to_int(n) for n in nums]
    >>> print r == ints
    1

    >>> roman_to_int('VVVIV')
    Traceback (most recent call last):
     ...
    ValueError: input is not a valid roman numeral: VVVIV
    >>> roman_to_int(1)
    Traceback (most recent call last):
     ...
    TypeError: expected string, got <type 'int'>
    >>> roman_to_int('a')
    Traceback (most recent call last):
     ...
    ValueError: input is not a valid roman numeral: A
    >>> roman_to_int('IL')
    Traceback (most recent call last):
     ...
    ValueError: input is not a valid roman numeral: IL
    """
    if type(input) != type(""):
        raise TypeError("expected string, got %s" % type(input))
    input = input.upper()
    nums = ['M', 'D', 'C', 'L', 'X', 'V', 'I']
    ints = [1000, 500, 100, 50,  10,  5,   1]
    places = []
    for c in input:
        if not c in nums:
            raise ValueError("input is not a valid roman numeral: %s" % input)
    for i in range(len(input)):
        c = input[i]
        value = ints[nums.index(c)]
        # If the next place holds a larger number, this value is negative.
        try:
            nextvalue = ints[nums.index(input[i +1])]
            if nextvalue > value:
                value *= -1
        except IndexError:
            # there is no next place.
            pass
        places.append(value)
    sum = 0
    for n in places: sum += n
    # Easiest test for validity...
    if int_to_roman(sum) == input:
        return sum
    else:
        raise ValueError('input is not a valid roman numeral: %s' % input)

In [3]:
now = datetime.datetime.utcnow()
delta=datetime.datetime.utcnow()-datetime.datetime.now()
delta=round(delta.seconds/3600)
delta


Out[3]:
4

In [4]:
def time_to_roman(withSeconds=False, inUTC=False):
    # now in roman numerals
    if inUTC:
        now = datetime.datetime.utcnow()
    else:
        now = datetime.datetime.now()
    info = [now.hour, now.minute]
    if withSeconds:
        info.append(now.second)
    info = [int_to_roman(item) for item in info]
    info = ':'.join(info)

    # add time-zone
    if inUTC:
        info += 'Z'
    else:
        delta=datetime.datetime.utcnow()-datetime.datetime.now()
        delta=round(delta.seconds/3600)
        info += '-%s' % (int_to_roman(delta))  # TODO

    return info
print(time_to_roman(False))


XIII:XXX-IV

In [5]:
def date_to_roman():
    now = datetime.datetime.now()
    info = (now.year, now.month, now.day)
    info = [int_to_roman(item) for item in info]
    return '-'.join(info)
print(date_to_roman())


MMXVI-VII-XII

In [9]:
print(' '.join((date_to_roman(),time_to_roman())))


MMXVI-VII-XII XV:IX-IV

In [ ]: