Filename | /usr/share/perl5/vendor_perl/Time/JulianDay.pm |
Statements | Executed 29 statements in 832µs |
Calls | P | F | Exclusive Time |
Inclusive Time |
Subroutine |
---|---|---|---|---|---|
1 | 1 | 1 | 14µs | 38µs | BEGIN@5 | Time::JulianDay::
1 | 1 | 1 | 12µs | 16µs | BEGIN@126 | Time::JulianDay::
1 | 1 | 1 | 11µs | 12µs | BEGIN@128 | Time::JulianDay::
1 | 1 | 1 | 10µs | 16µs | BEGIN@17 | Time::JulianDay::
1 | 1 | 1 | 10µs | 29µs | BEGIN@30 | Time::JulianDay::
1 | 1 | 1 | 9µs | 31µs | BEGIN@6 | Time::JulianDay::
1 | 1 | 1 | 9µs | 41µs | BEGIN@20 | Time::JulianDay::
1 | 1 | 1 | 8µs | 20µs | BEGIN@16 | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | day_of_week | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | gm_julian_day | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | inverse_julian_day | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | jd_secondsgm | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | jd_secondslocal | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | jd_timegm | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | jd_timelocal | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | julian_day | Time::JulianDay::
0 | 0 | 0 | 0s | 0s | local_julian_day | Time::JulianDay::
Line | State ments |
Time on line |
Calls | Time in subs |
Code |
---|---|---|---|---|---|
1 | package Time::JulianDay; | ||||
2 | |||||
3 | 1 | 10µs | require 5.000; | ||
4 | |||||
5 | 2 | 35µs | 2 | 62µs | # spent 38µs (14+24) within Time::JulianDay::BEGIN@5 which was called:
# once (14µs+24µs) by Time::ParseDate::BEGIN@7 at line 5 # spent 38µs making 1 call to Time::JulianDay::BEGIN@5
# spent 24µs making 1 call to Exporter::import |
6 | 2 | 52µs | 2 | 52µs | # spent 31µs (9+22) within Time::JulianDay::BEGIN@6 which was called:
# once (9µs+22µs) by Time::ParseDate::BEGIN@7 at line 6 # spent 31µs making 1 call to Time::JulianDay::BEGIN@6
# spent 22µs making 1 call to Exporter::import |
7 | |||||
8 | 1 | 6µs | @ISA = qw(Exporter); | ||
9 | 1 | 2µs | @EXPORT = qw(julian_day inverse_julian_day day_of_week | ||
10 | jd_secondsgm jd_secondslocal | ||||
11 | jd_timegm jd_timelocal | ||||
12 | gm_julian_day local_julian_day | ||||
13 | ); | ||||
14 | 1 | 300ns | @EXPORT_OK = qw($brit_jd); | ||
15 | |||||
16 | 2 | 24µs | 2 | 32µs | # spent 20µs (8+12) within Time::JulianDay::BEGIN@16 which was called:
# once (8µs+12µs) by Time::ParseDate::BEGIN@7 at line 16 # spent 20µs making 1 call to Time::JulianDay::BEGIN@16
# spent 12µs making 1 call to strict::import |
17 | 2 | 32µs | 2 | 21µs | # spent 16µs (10+6) within Time::JulianDay::BEGIN@17 which was called:
# once (10µs+6µs) by Time::ParseDate::BEGIN@7 at line 17 # spent 16µs making 1 call to Time::JulianDay::BEGIN@17
# spent 6µs making 1 call to integer::import |
18 | |||||
19 | # constants | ||||
20 | 2 | 49µs | 2 | 73µs | # spent 41µs (9+32) within Time::JulianDay::BEGIN@20 which was called:
# once (9µs+32µs) by Time::ParseDate::BEGIN@7 at line 20 # spent 41µs making 1 call to Time::JulianDay::BEGIN@20
# spent 32µs making 1 call to vars::import |
21 | |||||
22 | 1 | 200ns | $VERSION = 2011.0505; | ||
23 | |||||
24 | # calculate the julian day, given $year, $month and $day | ||||
25 | sub julian_day | ||||
26 | { | ||||
27 | my($year, $month, $day) = @_; | ||||
28 | my($tmp); | ||||
29 | |||||
30 | 2 | 393µs | 2 | 48µs | # spent 29µs (10+19) within Time::JulianDay::BEGIN@30 which was called:
# once (10µs+19µs) by Time::ParseDate::BEGIN@7 at line 30 # spent 29µs making 1 call to Time::JulianDay::BEGIN@30
# spent 19µs making 1 call to Exporter::import |
31 | # confess() unless defined $day; | ||||
32 | |||||
33 | $tmp = $day - 32075 | ||||
34 | + 1461 * ( $year + 4800 - ( 14 - $month ) / 12 )/4 | ||||
35 | + 367 * ( $month - 2 + ( ( 14 - $month ) / 12 ) * 12 ) / 12 | ||||
36 | - 3 * ( ( $year + 4900 - ( 14 - $month ) / 12 ) / 100 ) / 4 | ||||
37 | ; | ||||
38 | |||||
39 | return($tmp); | ||||
40 | |||||
41 | } | ||||
42 | |||||
43 | sub gm_julian_day | ||||
44 | { | ||||
45 | my($secs) = @_; | ||||
46 | my($sec, $min, $hour, $mon, $year, $day, $month); | ||||
47 | ($sec, $min, $hour, $day, $mon, $year) = gmtime($secs); | ||||
48 | $month = $mon + 1; | ||||
49 | $year += 1900; | ||||
50 | return julian_day($year, $month, $day) | ||||
51 | } | ||||
52 | |||||
53 | sub local_julian_day | ||||
54 | { | ||||
55 | my($secs) = @_; | ||||
56 | my($sec, $min, $hour, $mon, $year, $day, $month); | ||||
57 | ($sec, $min, $hour, $day, $mon, $year) = localtime($secs); | ||||
58 | $month = $mon + 1; | ||||
59 | $year += 1900; | ||||
60 | return julian_day($year, $month, $day) | ||||
61 | } | ||||
62 | |||||
63 | sub day_of_week | ||||
64 | { | ||||
65 | my ($jd) = @_; | ||||
66 | return (($jd + 1) % 7); # calculate weekday (0=Sun,6=Sat) | ||||
67 | } | ||||
68 | |||||
69 | |||||
70 | # The following defines the first day that the Gregorian calendar was used | ||||
71 | # in the British Empire (Sep 14, 1752). The previous day was Sep 2, 1752 | ||||
72 | # by the Julian Calendar. The year began at March 25th before this date. | ||||
73 | |||||
74 | 1 | 300ns | $brit_jd = 2361222; | ||
75 | |||||
76 | # Usage: ($year,$month,$day) = &inverse_julian_day($julian_day) | ||||
77 | sub inverse_julian_day | ||||
78 | { | ||||
79 | my($jd) = @_; | ||||
80 | my($jdate_tmp); | ||||
81 | my($m,$d,$y); | ||||
82 | |||||
83 | carp("warning: julian date $jd pre-dates British use of Gregorian calendar\n") | ||||
84 | if ($jd < $brit_jd); | ||||
85 | |||||
86 | $jdate_tmp = $jd - 1721119; | ||||
87 | $y = (4 * $jdate_tmp - 1)/146097; | ||||
88 | $jdate_tmp = 4 * $jdate_tmp - 1 - 146097 * $y; | ||||
89 | $d = $jdate_tmp/4; | ||||
90 | $jdate_tmp = (4 * $d + 3)/1461; | ||||
91 | $d = 4 * $d + 3 - 1461 * $jdate_tmp; | ||||
92 | $d = ($d + 4)/4; | ||||
93 | $m = (5 * $d - 3)/153; | ||||
94 | $d = 5 * $d - 3 - 153 * $m; | ||||
95 | $d = ($d + 5) / 5; | ||||
96 | $y = 100 * $y + $jdate_tmp; | ||||
97 | if($m < 10) { | ||||
98 | $m += 3; | ||||
99 | } else { | ||||
100 | $m -= 9; | ||||
101 | ++$y; | ||||
102 | } | ||||
103 | return ($y, $m, $d); | ||||
104 | } | ||||
105 | |||||
106 | { | ||||
107 | 2 | 4µs | my($sec, $min, $hour, $day, $mon, $year) = gmtime(0); | ||
108 | 1 | 700ns | $year += 1900; | ||
109 | 1 | 700ns | if ($year == 1970 && $mon == 0 && $day == 1) { | ||
110 | # standard unix time format | ||||
111 | 1 | 300ns | $jd_epoch = 2440588; | ||
112 | } else { | ||||
113 | $jd_epoch = julian_day($year, $mon+1, $day); | ||||
114 | } | ||||
115 | 1 | 800ns | $jd_epoch_remainder = $hour*3600 + $min*60 + $sec; | ||
116 | } | ||||
117 | |||||
118 | sub jd_secondsgm | ||||
119 | { | ||||
120 | my($jd, $hr, $min, $sec) = @_; | ||||
121 | |||||
122 | my($r) = (($jd - $jd_epoch) * 86400 | ||||
123 | + $hr * 3600 + $min * 60 | ||||
124 | - $jd_epoch_remainder); | ||||
125 | |||||
126 | 2 | 32µs | 2 | 21µs | # spent 16µs (12+4) within Time::JulianDay::BEGIN@126 which was called:
# once (12µs+4µs) by Time::ParseDate::BEGIN@7 at line 126 # spent 16µs making 1 call to Time::JulianDay::BEGIN@126
# spent 4µs making 1 call to integer::unimport |
127 | return ($r + $sec); | ||||
128 | 2 | 182µs | 2 | 14µs | # spent 12µs (11+1) within Time::JulianDay::BEGIN@128 which was called:
# once (11µs+1µs) by Time::ParseDate::BEGIN@7 at line 128 # spent 12µs making 1 call to Time::JulianDay::BEGIN@128
# spent 1µs making 1 call to integer::import |
129 | } | ||||
130 | |||||
131 | sub jd_secondslocal | ||||
132 | { | ||||
133 | my($jd, $hr, $min, $sec) = @_; | ||||
134 | my $jds = jd_secondsgm($jd, $hr, $min, $sec); | ||||
135 | return $jds - tz_local_offset($jds); | ||||
136 | } | ||||
137 | |||||
138 | # this uses a 0-11 month to correctly reverse localtime() | ||||
139 | sub jd_timelocal | ||||
140 | { | ||||
141 | my ($sec,$min,$hours,$mday,$mon,$year) = @_; | ||||
142 | $year += 1900 unless $year > 1000; | ||||
143 | my $jd = julian_day($year, $mon+1, $mday); | ||||
144 | my $jds = jd_secondsgm($jd, $hours, $min, $sec); | ||||
145 | return $jds - tz_local_offset($jds); | ||||
146 | } | ||||
147 | |||||
148 | # this uses a 0-11 month to correctly reverse gmtime() | ||||
149 | sub jd_timegm | ||||
150 | { | ||||
151 | my ($sec,$min,$hours,$mday,$mon,$year) = @_; | ||||
152 | $year += 1900 unless $year > 1000; | ||||
153 | my $jd = julian_day($year, $mon+1, $mday); | ||||
154 | return jd_secondsgm($jd, $hours, $min, $sec); | ||||
155 | } | ||||
156 | |||||
157 | 1 | 9µs | 1; | ||
158 | |||||
159 | __END__ |