code: def jd_to_struct_time(jd):
      
      year, month, day = jdutil.jd_to_date(jd)
  
      # Convert time of day from fraction of day
      day_fraction = day - int(day)
      hour, minute, second, ms = jdutil.days_to_hmsm(day_fraction)
      day = int(day)
  
      # This conversion can return negative values for items we do not want to be
      # negative: month, day, hour, minute, second.
      year, month, day, hour, minute, second = _roll_negative_time_fields(
          year, month, day, hour, minute, second)
  
      return struct_time(
          [year, month, day, hour, minute, second] + TIME_EMPTY_EXTRAS
      )
docs: Return a `struct_time` converted from a Julian Date float number.
  
      WARNING: Conversion to then from Julian Date value to `struct_time` can be
      inaccurate and lose or gain time, especially for BC (negative) years.
  
      NOTE: extra fields `tm_wday`, `tm_yday`, and `tm_isdst` are set to default
      values, not real ones.