This file is indexed.

/usr/share/doc/net-acct/examples/ptime.pl is in net-acct 0.71-9.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File: ptime.pl
# Originally was called: pdate.pl
# Created by: Jeff Kellem <composer@chem.bu.edu>
# Created a little while back..
# Last modified: 21 Feb 1991
# Version: 0.8a (first release)
#
# Minor History:
#   Started out as a quick hack for date formatting for bry (a friend).
#   An OS upgrade replaced date with one that didn't support +FORMAT and he
#   wanted something similar.  So, something quick was hacked up.  Now, it's
#   a simple little package for use within other routines.
#
# routines for producing user-specified date formats
#
# Possible things you may want to change before calling these routines:
# $ptime'default_TZ = timezone to use is if no TZ environment var
# ex: $ptime'default_TZ = 'EST5EDT';
#
# Routines available in this package (usage):
# &'zonetime($time);
# &'zonetime;
#   returns what gmtime($time) and localtime($time) return.
#   if $time is not specified, use current time from time function.  :-)
# &'ptime($format, $time);
#   returns date/time in a user-specified $format.
#   if $time is not specified, use current time.
#   n.b.: if $time is null, will be considered the "beginning of time". 
#   if $format is null, use $ptime'default_format (ctime format).
#   $format interprets the following "escape sequences":
#     ESCAPE	REPLACED BY 
#	%n	newline     
#	%t	tab
#	%a	abbreviated weekday name (Sun to Sat)
#	%A	full weekday name
#	%b	abbrev. month name (Jan to Dec)
#	%h	abbrev. month name (Jan to Dec)
#	%B	full month name
#	%d	day of month (01 to 31)
#	%e	day of month ( 1 to 31) [single digits preceded by a space]
#	%m	month (01 to 12)
#	%D	mm/dd/yy
#	%H	hour (00 to 23)
#	%I	hour (01 to 12)
#	%M	minutes (00 to 59)
#	%S	seconds (00 to 59)
#	%p	AM or PM
#	%j	day of year (001 to 366)
#	%w	day of week (Sunday == 0)
#	%r	hh:mm:ss [AP]M
#	%R	hh:mm
#	%T	hh:mm:ss
#	%y	year (last 2 digits)
#	%Y	year (4 digits, 19xx, 20xx)
#	%Z	timezone
#	%%	a single `%'
#
# Example:
#   &'ptime('',$time);  # is just &'ctime($time);
#   print &'ptime("%D %T %Z\n",time); # prints "02/17/91 14:23:54 GMT\n"
#   $date = &'ptime('%d %h %Y',time); # $date = "17 Feb 1991";
#   $filename = &'ptime('%d_%h_%Y');  # $filename = "17_Feb_1991";
#
# Limitations:
#   Doesn't parse left to right (or at all).. ;-}
#	Just does straight subst's. 
#	So, $format='%%y' will return '%91' instead of '%y'.
#	The %% -> % translation is done last.  Maybe I should move it to
#	the top of the subst's.  hmm... 
#   Is biased toward American date formatting.  May add more hooks for
#	easy conversion to other languages.     
#
# TODO:
#   Should get rid of multiple sprintf's when the same occur more than once.
#   Make it easier to modify for other languages
#	things like separators, order, etc.
#

CONFIG: {
    package ptime;

    $default_TZ = 'GMT';
    $default_format = '%a %h %d %T %Z %Y';  # ctime default format
    $am = "AM";
    $pm = "PM";
    @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
    @fullweek = ('Sunday','Monday','Tuesday','Wednesday',
		 'Thursday','Friday','Saturday');
    @month = ('Jan','Feb','Mar','Apr','May','Jun',
	      'Jul','Aug','Sep','Oct','Nov','Dec');
    @fullmonth = ('January','February','March','April','May','June','July',
		  'August','September','October','November','December');
}

sub zonetime {	# first arg is time (# of secs)
    package ptime;

    $time = $_[0] || ( ! defined $_[0] && time ) || 0;
    $TZ = $ENV{'TZ'} || $default_TZ;
    $TZ eq 'GMT' ? gmtime($time) : localtime($time);
}

sub ptime {
    package ptime;

    local($_, $time) = @_;	# $_ is format, $time is time (# of secs)

    ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = &'zonetime($time);

    $ampm = ($hour % 12);
    $ampm += ($hour % 12) ? 0 : 12;
    $p = ($hour < 12) ? $am : $pm;

    $_ = $default_format unless $_;
    s/%n/\n/g;	# newline
    s/%t/\t/g;	# tab
    s/%p/$p/g;				# AM or PM
    s/%m/sprintf("%02d",$mon+1)/eg;	# month (01 to 12)
    s/%d/sprintf("%02d",$mday)/eg;	# day of month (01 to 31)
    s/%e/sprintf("%2d",$mday)/eg;	# day of month ( 1 to 31)
    # no special formatting for month & day?  need new %-formats
    #s/%m/$mon+1/eg;	# month (1 to 12)
    #s/%d/$mday/g;	# day (1 to 31)
    s/%y/sprintf("%02d",$year)/eg;	# year (last 2 digits)
    # prints 2069 instead of 1970 for things like EST (oh well.. ;-)
    s/%Y/$year + (($year < 70) ? 2000 : 1900)/eg; # year (19yy or 20yy)
    s:%D:sprintf("%02d/%02d/%02d",$mon+1,$mday,$year):eg;	# mm/dd/yy
    s/%H/sprintf("%02d",$hour)/eg;	# hour (00 to 23)
    s/%I/sprintf("%02d",$ampm)/eg;	# hour (01 to 12)
    s/%M/sprintf("%02d",$min)/eg;	# minutes (00 to 59)
    s/%S/sprintf("%02d",$sec)/eg;	# seconds (00 to 59)
    s/%T/sprintf("%02d:%02d:%02d",$hour,$min,$sec)/eg;  # HH:MM:SS
    s/%j/sprintf("%03d",$yday+1)/eg;# day of year (001 to 366)
    s/%w/$wday/g;# day of week (Sunday == 0)
    s/%a/$week[$wday]/g;	# abbrev. weekday (Sun to Sat)
    s/%A/$fullweek[$wday]/g;	# full weekday name
    s/%[bh]/$month[$mon]/g;	# abbrev. month (Jan to Dec)
    s/%B/$fullmonth[$mon]/g;	# full month name
    s/%r/sprintf("%02d:%02d:%02d $p", $ampm, $min, $sec)/eg; # hh:mm:ss [AP]M
    s/%R/sprintf("%02d:%02d", $hour, $min)/eg;	# hh:mm
    # are we in Daylight Savings Time?
    $TZ =~ s/^(\w{3})-?\d+(\w{3})$/$isdst ? $2 : $1/e;
    s/%Z/$TZ/g;	# timezone as specified by $TZ
    s/%%/%/g;	# single `%'
    $_;
}

# in case someone doesn't want to rely on $ptime'default_format or
# just wants a &'ctime sub.
sub ctime {
    $time = $_[0];
    $format = "%a %h %d %T %Z %Y\n";
    &'ptime($format, $time);
}

1;