   well as the zone abbreviation field used exclusively
   for formatting purposes.
   """
-  defstruct [:year, :month, :day, :hour, :minute, :second, :microsecond,
+  defstruct [:year, :month, :day, :hour, :minute, :second, :micro_second,
              :time_zone, :zone_abbr, :utc_offset, :std_offset, calendar: Calendar.ISO]
   @type t :: %__MODULE__{year: Calendar.year, month: Calendar.month, day: Calendar.day,
                          calendar: Calendar.calendar, hour: Calendar.hour, minute: Calendar.minute,
-                         second: Calendar.second, microsecond: Calendar.microsecond,
+                         second: Calendar.second, micro_second: Calendar.micro_second,
                          time_zone: Calendar.time_zone, zone_abbr: Calendar.zone_abbr,
                          utc_offset: Calendar.utc_offset, std_offset: Calendar.std_offset}
 end

  may occur more than once. Since `NaiveDateTime` is not
  validated against a timezone, such errors would go unnoticed.
  """
  defstruct [:year, :month, :day, :hour, :minute, :second, :microsecond, calendar: Calendar.ISO]
  @type t :: %__MODULE__{year: Calendar.year, month: Calendar.month, day: Calendar.day,
                         calendar: Calendar.calendar, hour: Calendar.hour, minute: Calendar.minute,
                         second: Calendar.second, microsecond: Calendar.microsecond}
end

defmodule DateTime do

  @type hour        :: integer
  @type minute      :: integer
  @type second      :: integer
  @type micro_second :: integer

  @typedoc "A calendar implementation"
  @type calendar    :: module
