    (Clock/systemDefaultZone))
   ([x]
    (Clock/system (zone-id x)))
-  ([a b]
-   (if (instant? a) 
-       (Clock/fixed a (zone-id b))
-       (Clock/offset a (duration b)))))
+  ([instant-or-clock zone-or-duration]
+   (if (instant? instant-or-clock) 
+       (Clock/fixed instant-or-clock (zone-id zone-or-duration))
+       (Clock/offset instant-or-clock (duration zone-or-duration)))))
 
 (defn date-time-formatter
   ([x]

     string? (LocalDateTime/parse x)
     keyword? (local-date-time-keywords x)
     :else (LocalDateTime/from x)))
  ([a b]
   (cond
     (and (local-date? a) (local-time? b)) (LocalDateTime/of a b)
     (instant? a) (LocalDateTime/ofInstant a (zone-id b))
     :else (LocalDateTime/parse a b)))
  ([year month day-of-month hour minute]
   (LocalDateTime/of year month day-of-month hour minute))
  ([year month day-of-month hour minute second]
   (LocalDateTime/of year month day-of-month hour minute second))
  ([year month day-of-month hour minute second nano-of-second]
   (LocalDateTime/of year month day-of-month hour minute second nano-of-second)))

(defn offset-date-time
  ([]

     string? (OffsetTime/parse x)
     keyword? (offset-time-keywords x)
     :else (OffsetTime/from x)))
  ([time-or-instant-or-text offset-or-zone-or-formatter]
   (pred-cond time-or-instant-or-text
     local-time? (OffsetTime/of
                   time-or-instant-or-text
                   (zone-offset offset-or-zone-or-formatter))
     instant? (OffsetTime/ofInstant
                time-or-instant-or-text
                (zone-id offset-or-zone-or-formatter))
     :else (OffsetTime/parse
             time-or-instant-or-text
             offset-or-zone-or-formatter)))
  ([hour minute second nano-of-second offset]
   (OffsetTime/of hour minute second nano-of-second offset)))

