← Index
NYTProf Performance Profile   « line view »
For ./view
  Run on Fri Jul 31 19:05:14 2015
Reported on Fri Jul 31 19:08:10 2015

Filename/usr/share/perl5/vendor_perl/Time/JulianDay.pm
StatementsExecuted 29 statements in 832µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11114µs38µsTime::JulianDay::::BEGIN@5Time::JulianDay::BEGIN@5
11112µs16µsTime::JulianDay::::BEGIN@126Time::JulianDay::BEGIN@126
11111µs12µsTime::JulianDay::::BEGIN@128Time::JulianDay::BEGIN@128
11110µs16µsTime::JulianDay::::BEGIN@17Time::JulianDay::BEGIN@17
11110µs29µsTime::JulianDay::::BEGIN@30Time::JulianDay::BEGIN@30
1119µs31µsTime::JulianDay::::BEGIN@6Time::JulianDay::BEGIN@6
1119µs41µsTime::JulianDay::::BEGIN@20Time::JulianDay::BEGIN@20
1118µs20µsTime::JulianDay::::BEGIN@16Time::JulianDay::BEGIN@16
0000s0sTime::JulianDay::::day_of_weekTime::JulianDay::day_of_week
0000s0sTime::JulianDay::::gm_julian_dayTime::JulianDay::gm_julian_day
0000s0sTime::JulianDay::::inverse_julian_dayTime::JulianDay::inverse_julian_day
0000s0sTime::JulianDay::::jd_secondsgmTime::JulianDay::jd_secondsgm
0000s0sTime::JulianDay::::jd_secondslocalTime::JulianDay::jd_secondslocal
0000s0sTime::JulianDay::::jd_timegmTime::JulianDay::jd_timegm
0000s0sTime::JulianDay::::jd_timelocalTime::JulianDay::jd_timelocal
0000s0sTime::JulianDay::::julian_dayTime::JulianDay::julian_day
0000s0sTime::JulianDay::::local_julian_dayTime::JulianDay::local_julian_day
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1package Time::JulianDay;
2
3110µsrequire 5.000;
4
5235µs262µ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
use Carp;
# spent 38µs making 1 call to Time::JulianDay::BEGIN@5 # spent 24µs making 1 call to Exporter::import
6252µs252µ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
use Time::Timezone;
# spent 31µs making 1 call to Time::JulianDay::BEGIN@6 # spent 22µs making 1 call to Exporter::import
7
816µs@ISA = qw(Exporter);
912µ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 );
141300ns@EXPORT_OK = qw($brit_jd);
15
16224µs232µ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
use strict;
# spent 20µs making 1 call to Time::JulianDay::BEGIN@16 # spent 12µs making 1 call to strict::import
17232µs221µ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
use integer;
# spent 16µs making 1 call to Time::JulianDay::BEGIN@17 # spent 6µs making 1 call to integer::import
18
19# constants
20249µs273µ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
use vars qw($brit_jd $jd_epoch $jd_epoch_remainder $VERSION);
# spent 41µs making 1 call to Time::JulianDay::BEGIN@20 # spent 32µs making 1 call to vars::import
21
221200ns$VERSION = 2011.0505;
23
24# calculate the julian day, given $year, $month and $day
25sub julian_day
26{
27 my($year, $month, $day) = @_;
28 my($tmp);
29
302393µs248µ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
use Carp;
# 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
43sub 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
53sub 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
63sub 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
741300ns$brit_jd = 2361222;
75
76# Usage: ($year,$month,$day) = &inverse_julian_day($julian_day)
77sub 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{
10724µs my($sec, $min, $hour, $day, $mon, $year) = gmtime(0);
1081700ns $year += 1900;
1091700ns if ($year == 1970 && $mon == 0 && $day == 1) {
110 # standard unix time format
1111300ns $jd_epoch = 2440588;
112 } else {
113 $jd_epoch = julian_day($year, $mon+1, $day);
114 }
1151800ns $jd_epoch_remainder = $hour*3600 + $min*60 + $sec;
116}
117
118sub 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
126232µs221µ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
no integer;
# spent 16µs making 1 call to Time::JulianDay::BEGIN@126 # spent 4µs making 1 call to integer::unimport
127 return ($r + $sec);
1282182µs214µ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
use integer;
# spent 12µs making 1 call to Time::JulianDay::BEGIN@128 # spent 1µs making 1 call to integer::import
129}
130
131sub 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()
139sub 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()
149sub 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
15719µs1;
158
159__END__