docs: def fromHumanly(klass, humanStr, tzinfo=None, now=None):
          """Return a new Time instance from a string a human might type.
  
          @param humanStr: the string to be parsed.
  
          @param tzinfo: A tzinfo instance indicating the timezone to assume if
          none is specified in humanStr. If None, assume UTC.
  
          @param now: A Time instance to be considered "now" for when
          interpreting relative dates like "tomorrow". If None, use the real now.
  
          Total crap now, it just supports weekdays, "today" and "tomorrow" for
          now. This is pretty insufficient and useless, but good enough for some
          demo functionality, or something.
          """
          humanStr = humanStr.strip()
          if now is None:
              now = Time()
          if tzinfo is None:
              tzinfo = FixedOffset(0, 0)
  
          for pattern, creator in klass.humanlyPatterns:
              match = pattern.match(humanStr)
              if not match \
              or match.span()[1] != len(humanStr):
                  continue
              try:
                  return creator(klass, match, tzinfo, now)
              except ValueError:
                  continue
          raise ValueError, 'could not parse date: %r' % (humanStr,)