Time Representation
The satkit package makes use of a custom time class. This is wrapper around a custom rust class that adds the ability to represent time with different scales, or epochs, which is often necessary in the calculation of astronomical phenomena.
However, all functions in the satkit package that take time as an input can accept either the satkit.time class or the more commonly-used datetime.datetime class. For the latter, times are taken to have the UTC epoch.
- class satkit.timescale
Specify time scale used to represent or convert between the “satkit.time” representation of time
Most of the time, these are not needed directly, but various time scales are needed to compute precise rotations between various inertial and Earth-fixed coordinate frames
For an excellent overview, see: https://spsweb.fltops.jpl.nasa.gov/portaldataops/mpg/MPG_Docs/MPG%20Book/Release/Chapter2-TimeScales.pdf
Values:
Invalid: Invalid time scale
UTC: Universal Time Coordinate
TT: Terrestrial Time
UT1: UT1
TAI: International Atomic Time
GPS: Global Positioning System (GPS) time
TDB: Barycentric Dynamical Time
- class satkit.time(*py_args)
Bases:
objectRepresentation of an instant in time
This has functionality similar to the “datetime” object, and in fact has the ability to convert to an from the “datetime” object. However, a separate time representation is needed as the “datetime” object does not allow for conversion between various time epochs (GPS, TAI, UTC, UT1, etc…)
Notes
If no arguments are passed in, the created object represents the current time
If year is passed in, month and day must also be passed in
If hour is passed in, minute and second must also be passed in
Args:
year (int, optional)Gregorian year (e.g., 2024)
month (int, optional)Gregorian month (1 = January, 2 = February, …)
day (int, optional)Day of month, beginning with 1
hour (int, optional)Hour of day, in range [0,23] (optional), default is 0
min (int, optional)Minute of hour, in range [0,59], default is 0
sec (float, optional)floating point second of minute, in range [0,60), default is 0
scale (satkit.timescale, optional)Time scale , default is satkit.timescale.UTC
str (str, optional)string representation of time, in format “YYYY-MM-DD HH:MM:SS.sssZ” or if other will try to guess
Returns:
satkit.timeTime object representing input date and time, or if no arguments, the current date and time
Example
>>> print(satkit.time(2023, 3, 5, 11, 3, 45.453)) 2023-03-05 11:03:45.453Z
>>> print(satkit.time(2023, 3, 5)) 2023-03-05 00:00:00.000Z
- add_utc_days(days)
Add given number of UTC days to a time object, and return the result
- Parameters:
days (float) – Number of days to add
- Returns:
Time object representing input time plus given number of days
- Return type:
Note:
A UTC days is defined as being exactly 86400 seconds long. This avoids the ambiguity of adding a “day” to a time that has a leap second
- as_date()
Return tuple representing as UTC Gegorian date of the time object.
Returns:
tuple[int, int, int]Tuple with 3 elements representing the Gregorian year, month, and day of the time object
Fractional component of day are truncated Month is in range [1,12] Day is in range [1,31]
- as_datetime(utc=True)
Convert object to “datetime.datetime” object representing same instant in time.
Args:
utc (bool, optional)Whether to make the “datetime.datetime” object represent time in the local timezone or “UTC”. Default is True
Returns:
datetime.datetime“datetime.datetime” object representing the same instant in time as the “satkit.time” object
Example
>>> dt = satkit.time(2023, 6, 3, 6, 19, 34).as_datetime(True) >>> print(dt) 2023-06-03 06:19:34+00:00 >>> >>> dt = satkit.time(2023, 6, 3, 6, 19, 34).as_datetime(False) >>> print(dt) 2023-06-03 02:19:34
- as_gregorian()
Return tuple representing as UTC Gegorian date and time of the time object.
Args:
scale (timescale, optional)Time scale. Default is satkit.timescale.UTC
Returns:
tuple[int, int, int, int, int, float]Tuple with 6 elements representing the Gregorian year, month, day, hour, minute, and second of the time object
Month is in range [1,12] Day is in range [1,31]
- as_iso8601()
Represent time as ISO 8601 string
Returns:
strISO 8601 string representation of time: “YYYY-MM-DDTHH:MM:SS.sssZ”
- as_jd(scale=Ellipsis)
Represent time instance as Julian Date with the provided time scale
If no time scale is provided, default is satkit.timescale.UTC
- as_mjd(scale=Ellipsis)
Represent time instance as a Modified Julian Date with the provided time scale
If no time scale is provided, default is satkit.timescale.UTC
- as_rfc3339()
Represent time as RFC 3339 string
Returns:
strRFC 3339 string representation of time: “YYYY-MM-DDTHH:MM:SS.sssZ”
- as_unixtime()
Represent time as unixtime
(seconds since Jan 1, 1970 UTC, excluding leap seconds)
Includes fractional component of seconds
- datetime(utc=True)
Deprecated: use
satkit.time.as_datetime().Convert object to “datetime.datetime” object representing same instant in time.
Args:
utc (bool, optional)Whether to make the “datetime.datetime” object represent time in the local timezone or “UTC”. Default is True
Returns:
datetime.datetime“datetime.datetime” object representing the same instant in time as the “satkit.time” object
Example
>>> dt = satkit.time(2023, 6, 3, 6, 19, 34).datetime(True) >>> print(dt) 2023-06-03 06:19:34+00:00 >>> >>> dt = satkit.time(2023, 6, 3, 6, 19, 34).datetime(False) >>> print(dt) 2023-06-03 02:19:34
- day_of_year()
Return the 1-based Gregorian day of the year (1 = January 1, 365 = December 31)
Returns:
intThe 1-based day of the year
- static from_date(year, month, day)
Return a time object representing the start of the input day (midnight)
Args:
year (int)Gregorian year (e.g., 2024)
month (int)Gregorian month (1 = January, 2 = February, …)
day (int)Day of month, beginning with 1
Returns:
satkit.timeTime object representing the start of the input day (midnight)
- static from_datetime(tm)
Convert input “datetime.datetime” object to an “satkit.time” object representing the same instant in time
Args:
dt (datetime.datetime)“datetime.datetime” object to convert
Returns:
satkit.timeTime object representing the same instant in time as the input “datetime.datetime” object
- static from_gps_week_and_second(week, seconds)
Return a time object representing input GPS week and second
Args:
week (int)GPS week number
sec (float)GPS seconds of week
scale (timescale, optional)Time scale. Default is satkit.timescale.GPS
Returns:
satkit.timeTime object representing input GPS week and second
- static from_gregorian(year, month, day, hour, min, sec)
Create time object from 6 input arguments representing UTC Gregorian time.
Args:
year (int)Gregorian year
month (int)Gregorian month (1 = January, 2 = February, …)
day (int)Day of month, beginning with 1
hour (int)Hour of day, in range [0,23]
min (int)Minute of hour, in range [0,59]
sec (float)floating point second of minute, in range [0,60)
Returns:
satkit.timeTime object representing input UTC Gregorian time
Example
>>> print(satkit.time.from_gregorian(2023, 3, 5, 11, 3,45.453)) 2023-03-05 11:03:45.453Z
- static from_jd(jd, scale)
Return a time object representing input Julian date and time scale
Args:
jd (float)Julian date
scale (timescale, optional)Time scale. Default is satkit.timescale.UTC
Returns:
satkit.timeTime object representing input Julian date and time scale
- static from_mjd(mjd, scale)
Return a time object representing input modified Julian date and time scale
Args:
mjd (float)Modified Julian date
scale (satkit.timescale, optional)Time scale. Default is satkit.timescale.UTC
Returns:
satkit.timeTime object representing input modified Julian date and time scale
- static from_rfc3339(s)
Create a “time” object from input RFC 3339 string
Args:
rfc (str)RFC 3339 string representation of time
Notes
RFC 3339 is a subset of ISO 8601
Only allows a subset of the format: “YYYY-MM-DDTHH:MM:SS.sssZ” or “YYYY-MM-DDTHH:MM:SS.ssssssZ”
Returns:
satkit.timeTime object representing input RFC 3339 string
Example
>>> print(satkit.time.from_rfctime("2023-03-05T11:03:45.453Z")) 2023-03-05 11:03:45.453Z
- static from_string(s)
Create a “time” object from input string
Args:
str (str)string representation of time, in format “YYYY-MM-DD HH:MM:SS.sssZ” or if other will try to intelligently parse, but no guarantees
Note
This is probably not what you want. Use with caution.
Returns:
satkit.timeTime object representing input string
Example
>>> print(satkit.time.from_string("2023-03-05 11:03:45.453Z")) 2023-03-05 11:03:45.453Z
- static from_unixtime(t)
Return a time object representing input unixtime
Args:
ut (float)unixtime, UTC seconds since Jan 1, 1970 00:00:00 (leap seconds are not included)
Returns:
satkit.timeTime object representing input unixtime
- static now()
Create a “time” object representing the instant of time at the calling of the function.
Returns:
satkit.timeTime object representing the current time
- strftime(fmt)
Represent time as string with given format
Args:
format (str)format of the string
Format Codes:
%Y - year
%m - month with leading zeros (01-12)
%d - day of month with leading zeros (01-31)
%H - hour with leading zeros (00-23)
%M - minute with leading zeros (00-59)
%S - second with leading zeros (00-59)
%f - microsecond, allowing for trailing zeros
%b - abbreviated month name (Jan, Feb, …)
%B - full month name (January, February, …)
%A - full weekday name (Sunday, Monday, …)
%w - weekday as a decimal number (0=Sunday, 1=Monday, …)
Returns:
strstring representation of time
Example
>>> print(satkit.time(2023, 6, 3, 6, 19, 34).strptime("%Y-%m-%d %H:%M:%S")) 2023-06-03 06:19:34
- static strptime(s, fmt)
Create a “time” object from input string with given formatting
Args:
str (str)string representation of time
format (str)format of the string
Notes:
The format string is a subset of the strptime format string in the Python “datetime” module
Format Codes:
%Y - year
%m - month with leading zeros (01-12)
%d - day of month with leading zeros (01-31)
%H - hour with leading zeros (00-23)
%M - minute with leading zeros (00-59)
%S - second with leading zeros (00-59)
%f - microsecond, allowing for trailing zeros
%b - abbreviated month name (Jan, Feb, …)
%B - full month name (January, February, …)
Returns:
satkit.timeTime object representing input string
Example
# Note the microsecond %f actually is represented as milliseconds in the input string >>> print(satkit.time.strptime(“2023-03-05 11:03:45.453Z”, “%Y-%m-%d %H:%M:%S.%fZ”)) 2023-03-05 11:03:45.453Z
- weekday()
Return the day of the week
Returns:
satkit.weekdayDay of the week
- class satkit.duration(**kwargs)
Bases:
objectRepresentation of a duration, or interval of time
- days
Floating point number of days represented by duration
Returns:
floatFloating point number of days represented by duration
A day is defined as 86,400 seconds
- static from_days(d)
Create duration object given input number of days. Note: a day is defined as 86,400 seconds
Args:
d (float)Number of days
Returns:
satkit.durationDuration object representing input number of days
- static from_hours(d)
Create duration object representing input number of hours
Args:
h (float)Number of hours
Returns:
satkit.durationDuration object representing input number of hours
- static from_minutes(d)
Create duration object representing input number of minutes
Args:
m (float)Number of minutes
Returns:
satkit.durationDuration object representing input number of minutes
- static from_seconds(d)
Create duration object representing input number of seconds
Args:
s (float)Number of seconds
Returns:
satkit.durationDuration object representing input number of seconds
- hours
Floating point number of hours represented by duration
Returns:
floatFloating point number of hours represented by duration
- minutes
Floating point number of minutes represented by duration
Returns:
floatFloating point number of minutes represented by duration
- seconds
Floating point number of seconds represented by duration
Returns:
floatFloating point number of seconds represented by duration