++ed by:

1 non-PAUSE user.

and 1 contributors

# NAME

Astro::Montenbruck::Time - Time-related routines

Version 0.01

# SYNOPSIS

``````    use Astro::Montenbruck::Time qw/:all/;

# Convert Gregorian (new-style) date to old-style date
my \$j = cal2jd(1799, 6, 6); # Standard Julian date of A.Pushkin's birthday
my \$d = jd2cal(\$j, gregorian => 0) # (1799, 5, 25) = May 26, 1799.

# Julian date in centuries since epoch 2000.0
my \$t = jd_cent(\$j); # -2.0056810403833
...``````

# DESCRIPTION

Library of date/time manipulation routines for practical astronomy. Most of them are based on so called Julian date (JD), which is the number of days elapsed since mean UT noon of January 1st 4713 BC. This system of time measurement is widely adopted by the astronomers.

## JD and MJD

Many routines use Modified Julian date, which starts at 2000 January 0 (2000 January 1.0) as the starting point.

## Civil year vs astronomical year

There is disagreement between astronomers and historians about how to count the years preceding the year 1. Astronomers generally use zero-based system. The year before the year +1, is the year zero, and the year preceding the latter is the year -1. The year which the historians call 585 B.C. is actually the year -584.

In this module all subroutines accepting year assume that there is year zero. Thus, the sequence of years is: `BC -3, -2, -1, 0, 1, 2, 3, AD`.

## Date and Time

Time is represented by fractional part of a day. For example, 7h30m UT is `(7 + 30 / 60) / 24 = 0.3125`.

### Gregorian calendar

Civil calendar in most cases means proleptic Gregorian calendar. it is assumed that Gregorian calendar started at Oct. 4, 1582, when it was first adopted in several European countries. Many other countries still used the older Julian calendar. In Soviet Russia, for instance, Gregorian system was accepted on Jan 26, 1918. See: https://en.wikipedia.org/wiki/Gregorian_calendar#Adoption_of_the_Gregorian_Calendar

# EXPORTED CONSTANTS

• `\$SEC_PER_DAY` seconds per day (86400)

• `\$SEC_PER_CEN` seconds per century (3155760000)

• `\$J2000` Standard Julian date for start of epoch 2000,0 (2451545)

• `\$J1900` Standard Julian date for start of epoch 1900,0 (2415020)

• `\$GREGORIAN_START` Start of Gregorian calendar, YYYYMMDD (15821004)

• `\$JD_UNIX_EPOCH` Standard Julian date for start of the Unix epoch

# FUNCTIONS

## jd_cent(\$jd)

Convert Standard Julian Date to centuries passed since epoch 2000.0

## after_gregorian(\$year, \$month, \$date, gregorian_start => \$YYYYMMDD )

Does the given date fall to period after Gregorian calendar?

### Positional Arguments

• year (astronomic, zero-based)

• month (1-12)

• date UTC date (1-31) with hours and minutes as decimal part

### Optional Named Arguments

• gregorian_start — start of Gregorian calendar. Default value is 15821004 If the date is Julian ("old style"), use `undef` value. To provide non-standard start of Gregorian calendar, provide a number in format YYYYMMDDD, e.g. `19180126` for Jan 26, 1918.

true or false=.

## cal2jd(\$year, \$month, \$date)

Convert civil date/time to Standard Julian date.

If `gregorian_start` argument is not provided, it is assumed that this is a date of Proleptic Gregorian calendar, which started at Oct. 4, 1582.

### Positional Arguments:

• year (astronomic, zero-based)

• month (1-12)

• date UTC date (1-31) with hours and minutes as decimal part

### Optional Named Arguments

• gregorian_start — start of Gregorian calendar. Default value is 15821004 If the date is Julian ("old style"), use `undef` value. To provide non-standard start of Gregorian calendar, provide a number in format YYYYMMDDD, e.g. `19180126` for Jan 26, 1918.

### Returns

Standard Julian date

## jd2cal(\$jd)

Convert Standard Julian date to civil date/time

### Positional Arguments

Standard Julian Date

### Optional Named Arguments

• gregorian — if i<true>, the result will be old-style (Julian) date

### Returns

A list corresponding to the input values of "cal2jd(\$year, \$month, \$date)" function. The date is given in the proleptic Gregorian calendar system unless gregorian flag is set to true.

## jd0(\$jd)

Given Standard Julian Date, calculate Standard Julian date for midnight of the same date.

## unix2jd(\$seconds)

Given Unix time, in seconds, convert it to Standard Julian date.

## jd2unix(\$jd)

Given a Standard Julian Date, convert it to Unix time, in seconds since start of Unix epoch.

If JD falls before start of the epoch, result will be negative and thus, unusable for Unix-specific functions like localtime().

## jdnow()

Standard Julian date for the current moment.

## jd2mjd(\$jd)

Standard to Modified Julian date.

## mjd2jd(\$mjd)

Modified to Standard Julian date.

## jd_cent(\$jd)

Given aStandard Julian date, calculate time in centuries since epoch 2000.0.

## t1900(\$jd)

Given a Standard Julian date, calculate time in centuries since epoch 2000.0.

## jd2gst(\$jd)

Given Standard Julian date, calculate True Greenwich Sidereal time.

## jd2lst(\$jd, \$lng)

Givan Standard Julian date, calculate true Local Sidereal time.

### Arguments

• \$jd — Standard Julian date

• \$lng — Geographic longitude, negative for Eastern longitude, 0 by default

# AUTHOR

Sergey Krushinsky, `<krushi at cpan.org>`