1Class::Date(3) User Contributed Perl Documentation Class::Date(3)
2
3
4
6 Class::Date - Class for easy date and time manipulation
7
9 version 1.1.17
10
12 use Class::Date qw(:errors date localdate gmdate now -DateParse -EnvC);
13
14 # creating absolute date object (local time)
15 $date = Class::Date->new( [$year,$month,$day,$hour,$min,$sec]);
16 $date = date [$year,$month,$day,$hour,$min,$sec];
17 # ^- "date" is an exportable function, the same as Class::Date->new
18 $date = date { year => $year, month => $month, day => $day,
19 hour => $hour, min => $min, sec => $sec };
20 $date = date "2001-11-12 07:13:12";
21 $date = localdate "2001-12-11";
22 $date = now; # the same as date(time)
23 $date = date($other_date_object); # cloning
24 ...
25
26 # creating absolute date object (GMT)
27 $date = Class::Date->new( [$year,$month,$day,$hour,$min,$sec],'GMT');
28 $date = gmdate "2001-11-12 17:13";
29 ...
30
31 # creating absolute date object in any other timezone
32 $date = Class::Date->new( [$year,$month,$day,$hour,$min,$sec],'Iceland' );
33 $date = date "2001-11-12 17:13", 'Iceland';
34 $date2 = $date->new([$y2, $m2, $d2, $h2, $m2, $s2]);
35 # ^- timezone is inherited from the $date object
36
37 # creating relative date object
38 # (normally you don't need to create this object explicitly)
39 $reldate = Class::Date::Rel->new( "3Y 1M 3D 6h 2m 4s" );
40 $reldate = Class::Date::Rel->new( "6Y" );
41 $reldate = Class::Date::Rel->new( $secs ); # secs
42 $reldate = Class::Date::Rel->new( [$year,$month,$day,$hour,$min,$sec] );
43 $reldate = Class::Date::Rel->new( { year => $year, month => $month, day => $day,
44 hour => $hour, min => $min, sec => $sec } );
45 $reldate = Class::Date::Rel->new( "2001-11-12 07:13:12" );
46 $reldate = Class::Date::Rel->new( "2001-12-11" );
47
48 # getting values of an absolute date object
49 $date; # prints the date in default output format (see below)
50 $date->year; # year, e.g: 2001
51 $date->_year; # year - 1900, e.g. 101
52 $date->yr; # 2-digit year 0-99, e.g 1
53 $date->mon; # month 1..12
54 $date->month; # same as prev.
55 $date->_mon; # month 0..11
56 $date->_month; # same as prev.
57 $date->day; # day of month
58 $date->mday; # day of month
59 $date->day_of_month;# same as prev.
60 $date->hour;
61 $date->min;
62 $date->minute; # same as prev.
63 $date->sec;
64 $date->second; # same as prev.
65 $date->wday; # 1 = Sunday
66 $date->_wday; # 0 = Sunday
67 $date->day_of_week; # same as prev.
68 $date->yday;
69 $date->day_of_year; # same as prev.
70 $date->isdst; # DST?
71 $date->daylight_savings; # same as prev.
72 $date->epoch; # UNIX time_t
73 $date->monname; # name of month, eg: March
74 $date->monthname; # same as prev.
75 $date->wdayname; # Thursday
76 $date->day_of_weekname # same as prev.
77 $date->hms # 01:23:45
78 $date->ymd # 2000/02/29
79 $date->mdy # 02/29/2000
80 $date->dmy # 29/02/2000
81 $date->meridiam # 01:23 AM
82 $date->ampm # AM/PM
83 $date->string # 2000-02-29 12:21:11 (format can be changed, look below)
84 "$date" # same as prev.
85 $date->tzoffset # timezone-offset
86 $date->strftime($format) # POSIX strftime (without the huge POSIX.pm)
87 $date->tz # returns the base timezone as you specify, eg: CET
88 $date->tzdst # returns the real timezone with dst information, eg: CEST
89
90 ($year,$month,$day,$hour,$min,$sec)=$date->array;
91 ($year,$month,$day,$hour,$min,$sec)=@{ $date->aref };
92 # !! $year: 1900-, $month: 1-12
93
94 ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=$date->struct;
95 ($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=@{ $date->sref };
96 # !! $year: 0-, $month: 0-11
97
98 $hash=$date->href; # $href can be reused as a constructor
99 print $hash->{year}."-".$hash->{month}. ... $hash->{sec} ... ;
100
101 %hash=$date->hash;
102 # !! $hash{year}: 1900-, $hash{month}: 1-12
103
104 $date->month_begin # First day of the month (date object)
105 $date->month_end # Last day of the month
106 $date->days_in_month # 28..31
107
108 # constructing new date based on an existing one:
109 $new_date = $date->clone;
110 $new_date = $date->clone( year => 1977, sec => 14 );
111 # valid keys: year, _year, month, mon, _month, _mon, day, mday, day_of_month,
112 # hour, min, minute, sec, second, tz
113 # constructing a new date, which is the same as the original, but in
114 # another timezone:
115 $new_date = $date->to_tz('Iceland');
116
117 # changing date format
118 {
119 local $Class::Date::DATE_FORMAT="%Y%m%d%H%M%S";
120 print $date # result: 20011222000000
121 $Class::Date::DATE_FORMAT=undef;
122 print $date # result: Thu Oct 13 04:54:34 1994
123 $Class::Date::DATE_FORMAT="%Y/%m/%d"
124 print $date # result: 1994/10/13
125 }
126
127 # error handling
128 $a = date($date_string);
129 if ($a) { # valid date
130 ...
131 } else { # invalid date
132 if ($a->error == E_INVALID) { ... }
133 print $a->errstr;
134 }
135
136 # adjusting DST in calculations (see the doc)
137 $Class::Date::DST_ADJUST = 1; # this is the default
138 $Class::Date::DST_ADJUST = 0;
139
140 # "month-border adjust" flag
141 $Class::Date::MONTH_BORDER_ADJUST = 0; # this is the default
142 print date("2001-01-31")+'1M'; # will print 2001-03-03
143 $Class::Date::MONTH_BORDER_ADJUST = 1;
144 print date("2001-01-31")+'1M'; # will print 2001-02-28
145
146 # date range check
147 $Class::Date::RANGE_CHECK = 0; # this is the default
148 print date("2001-02-31"); # will print 2001-03-03
149 $Class::Date::RANGE_CHECK = 1;
150 print date("2001-02-31"); # will print nothing
151
152 # getting values of a relative date object
153 $reldate; # reldate in seconds (assumed 1 month = 2_629_744 secs)
154 $reldate->year;
155 $reldate->mon;
156 $reldate->month; # same as prev.
157 $reldate->day;
158 $reldate->hour;
159 $reldate->min;
160 $reldate->minute; # same as prev.
161 $reldate->sec; # same as $reldate
162 $reldate->second; # same as prev.
163 $reldate->sec_part; # "second" part of the relative date
164 $reldate->mon_part; # "month" part of the relative date
165
166 # arithmetic with dates:
167 print date([2001,12,11,4,5,6])->truncate;
168 # will print "2001-12-11"
169 $new_date = $date+$reldate;
170 $date2 = $date+'3Y 2D'; # 3 Years and 2 days
171 $date3 = $date+[1,2,3]; # $date plus 1 year, 2 months, 3 days
172 $date4 = $date+'3-1-5' # $date plus 3 years, 1 months, 5 days
173
174 $new_date = $date-$reldate;
175 $date2 = $date-'3Y'; # 3 Yearss
176 $date3 = $date-[1,2,3]; # $date minus 1 year, 2 months, 3 days
177 $date4 = $date-'3-1-5' # $date minus 3 years, 1 month, 5 days
178
179 $new_reldate = $date1-$date2;
180 $reldate2 = Class::Date->new('2000-11-12')-'2000-11-10';
181 $reldate3 = $date3-'1977-11-10';
182
183 $days_between = (Class::Date->new('2001-11-12')-'2001-07-04')->day;
184
185 # comparison between absolute dates
186 print $date1 > $date2 ? "I am older" : "I am younger";
187
188 # comparison between relative dates
189 print $reldate1 > $reldate2 ? "I am faster" : "I am slower";
190
191 # Adding / Subtracting months and years are sometimes tricky:
192 print date("2001-01-29") + '1M' - '1M'; # gives "2001-02-01"
193 print date("2000-02-29") + '1Y' - '1Y'; # gives "2000-03-01"
194
195 # Named interface ($date2 does not necessary to be a Class::Date object)
196 $date1->string; # same as $date1 in scalar context
197 $date1->subtract($date2); # same as $date1 - $date2
198 $date1->add($date2); # same as $date1 + $date2
199 $date1->compare($date2); # same as $date1 <=> $date2
200
201 $reldate1->sec; # same as $reldate1 in numeric or scalar context
202 $reldate1->compare($reldate2);# same as $reldate1 <=> $reldate2
203 $reldate1->add($reldate2); # same as $reldate1 + $reldate2
204 $reldate1->neg # used for subtraction
205
206 # Disabling Class::Date warnings at load time
207 BEGIN { $Class::Date::WARNINGS=0; }
208 use Class::Date;
209
211 This module is intended to provide a general-purpose date and datetime
212 type for perl. You have a Class::Date class for absolute date and
213 datetime, and have a Class::Date::Rel class for relative dates.
214
215 You can use "+", "-", "<" and ">" operators as with native perl data
216 types.
217
218 Note that this module is fairly ancient and dusty. You might want to
219 take a look at DateTime and its related modules for a more standard,
220 and maintained, Perl date manipulation solution.
221
223 If you want to use a date object, you need to do the following:
224
225 - create a new object
226 - do some operations (+, -, comparison)
227 - get result back
228
229 Creating a new date object
230 You can create a date object by the "date", "localdate" or "gmdate"
231 function, or by calling the Class::Date constructor.
232
233 "date" and "Class::Date->new" are equivalent, both has two arguments:
234 The date and the timezone.
235
236 $date1= date [2000,11,12];
237 $date2= Class::Date->new([2000,06,11,13,11,22],'GMT');
238 $date2= $date1->new([2000,06,11,13,11,22]);
239
240 If the timezone information is omitted, then it first check if "new" is
241 called as an object method or a class method. If it is an object
242 method, then it inherits the timezone from the base object, otherwise
243 the default timezone is used ($Class::Date::DEFAULT_TIMEZONE), which is
244 usually set to the local timezone (which is stored in
245 $Class::Date::LOCAL_TIMEZONE). These two variables are set only once to
246 the value, which is returned by the Class::Date::local_timezone()
247 function. You can change these values whenever you want.
248
249 "localdate $x" is equivalent to "date $x,
250 $Class::Date::LOCAL_TIMEZONE", "gmdate $x" is equivalent to "date $x,
251 $Class::Date::GMT_TIMEZONE".
252
253 $Class::Date::GMT_TIMEZONE is set to 'GMT' by default.
254
255 $date1= localdate [2000,11,12];
256 $date2= gmdate [2000,4,2,3,33,33];
257
258 $date = localdate(time);
259
260 The format of the accepted input date can be:
261
262 [$year,$month,$day,$hour,$min,$sec]
263 An array reference with 6 elements. The missing elements have
264 default values (year: 2000, month, day: 1, hour, min, sec: 0)
265
266 { year => $year, month => $month, day => $day, hour => $hour, min =>
267 $min, sec => $sec }
268 A hash reference with the same 6 elements as above.
269
270 "YYYYMMDDhhmmss"
271 A mysql-style timestamp value, which consist of at least 14 digit.
272
273 "973897262"
274 A valid 32-bit integer: This is parsed as a unix time.
275
276 "YYYY-MM-DD hh:mm:ss"
277 A standard ISO(-like) date format. Additional ".fraction" part is
278 ignored, ":ss" can be omitted.
279
280 additional input formats
281 You can specify "-DateParse" as an import parameter, e.g:
282
283 use Class::Date qw(date -DateParse);
284
285 With this, the module will try to load Date::Parse module, and if
286 it find it then all these formats can be used as an input. Please
287 refer to the Date::Parse documentation.
288
289 Operations
290 addition
291 You can add the following to a Class::Date object:
292
293 - a valid Class::Date::Rel object
294 - anything, that can be used for creating a new Class::Date::Rel object
295
296 It means that you don't need to create a new Class::Date::Rel
297 object every time when you add something to the Class::Date object,
298 it creates them automatically:
299
300 $date= Class::Date->new('2001-12-11')+Class::Date::Rel->new('3Y');
301
302 is the same as:
303
304 $date= date('2001-12-11')+'3Y';
305
306 You can provide a Class::Date::Rel object in the following form:
307
308 array ref
309 The same format as seen in Class::Date format, except the
310 default values are different: all zero.
311
312 hash ref
313 The same format as seen in Class::Date format, except the
314 default values are different: all zero.
315
316 "973897262"
317 A valid 32-bit integer is parsed as seconds.
318
319 "YYYY-MM-DD hh:mm:ss"
320 A standard ISO date format, but this is parsed as relative date
321 date and time, so month, day and year can be zero (and defaults
322 to zero).
323
324 "12Y 6M 6D 20h 12m 5s"
325 This special string can be used if you don't want to use the
326 ISO format. This string consists of whitespace separated tags,
327 each tag consists of a number and a unit. The units can be:
328
329 Y: year
330 M: month
331 D: day
332 h: hour
333 m: min
334 s: sec
335
336 The number and unit must be written with no space between them.
337
338 substraction
339 The same rules are true for substraction, except you can substract
340 two Class::Date object from each other, and you will get a
341 Class::Date::Rel object:
342
343 $reldate=$date1-$date2;
344 $reldate=date('2001-11-12 12:11:07')-date('2001-10-07 10:3:21');
345
346 In this case, the "month" field of the $reldate object will be 0,
347 and the other fields will contain the difference between two dates;
348
349 comparison
350 You can compare two Class::Date objects, or one Class::Date object
351 and another data, which can be used for creating a new Class::Data
352 object.
353
354 It means that you don't need to bless both objects, one of them can
355 be a simple string, array ref, hash ref, etc (see how to create a
356 date object).
357
358 if ( date('2001-11-12') > date('2000-11-11') ) { ... }
359
360 or
361
362 if ( date('2001-11-12') > '2000-11-11' ) { ... }
363
364 truncate
365 You can chop the time value from this object (set hour, min and sec
366 to 0) with the "truncate" or "trunc" method. It does not modify the
367 specified object, it returns with a new one.
368
369 clone
370 You can create new date object based on an existing one, by using
371 the "clone" method. Note, this DOES NOT modify the base object.
372
373 $new_date = $date->clone( year => 2001, hour => 14 );
374
375 The valid keys are: year, _year, month, mon, _month, _mon, day,
376 mday, day_of_month, hour, min, minute, sec, second, tz.
377
378 There is a "set" method, which does the same as the "clone", it
379 exists only for compatibility.
380
381 to_tz
382 You can use "to_tz" to create a new object, which means the same
383 time as the base object, but in the different timezone.
384
385 Note that $date->clone( tz => 'Iceland') and
386 $date->to_tz('Iceland') is not the same! Cloning a new object with
387 setting timezone will preserve the time information (hour, minute,
388 second, etc.), but transfer the time into other timezone, while
389 to_tz usually change these values based on the difference between
390 the source and the destination timezone.
391
392 Operations with Class::Date::Rel
393 The Class::Date::Rel object consists of a month part and a day
394 part. Most people only use the "day" part of it. If you use both
395 part, then you can get these parts with the "sec_part" and
396 "mon_part" method. If you use "sec", "month", etc. methods or if
397 you use this object in a mathematical context, then this object is
398 converted to one number, which is interpreted as second. The
399 conversion is based on a 30.436 days month. Don't use it too often,
400 because it is confusing...
401
402 If you use Class::Date::Rel in an expression with other Class::Date
403 or Class::Date::Rel objects, then it does what is expected:
404
405 date('2001-11-12')+'1M' will be '2001-12-12'
406
407 and
408
409 date('1996-02-11')+'2M' will be '1996-04-11'
410
411 Accessing data from a Class::Date and Class::Date::Rel object
412 You can use the methods methods described at the top of the document if
413 you want to access parts of the data which is stored in a Class::Date
414 and Class::Date::Rel object.
415
416 Error handling
417 If a date object became invalid, then the object will be reblessed to
418 Class::Date::Invalid. This object is false in boolean environment, so
419 you can test the date validity like this:
420
421 $a = date($input_date);
422 if ($a) { # valid date
423 ...
424 } else { # invalid date
425 if ($a->error == E_INVALID) { ... }
426 print $a->errstr;
427 }
428
429 Note even the date is invalid, the expression "defined $a" always
430 returns true, so the following is wrong:
431
432 $a = date($input_date);
433 if (defined $a) ... # WRONG!!!!
434
435 You can test the error by getting the $date->error value. You might
436 import the ":errors" tag:
437
438 use Class::Date qw(:errors);
439
440 Possible error values are:
441
442 E_OK
443 No errors.
444
445 E_INVALID
446 Invalid date. It is set when some of the parts of the date are
447 invalid, and Time::Local functions cannot convert them to a valid
448 date.
449
450 E_RANGE
451 This error is set, when parts of the date are valid, but the whole
452 date is not valid, e.g. 2001-02-31. When the
453 $Class::Date::RANGE_CHECK is not set, then these date values are
454 automatically converted to a valid date: 2001-03-03, but the
455 $date->error value are set to E_RANGE. If $Class::Date::RANGE_CHECK
456 is set, then a date "2001-02-31" became invalid date.
457
458 E_UNPARSABLE
459 This error is set, when the constructor cannot be created from a
460 scalar, e.g:
461
462 $a = date("4kd sdlsdf lwekrmk");
463
464 E_UNDEFINED
465 This error is set, when you want to create a date object from an
466 undefined value:
467
468 $a = Class::Date->new(undef);
469
470 Note, that localdate(undef) will create a valid object, because it
471 calls $Class::Date(time).
472
473 You can get the error in string form by calling the "errstr" method.
474
476 $DST_ADJUST is an important configuration option.
477
478 If it is set to true (default), then the module adjusts the date and
479 time when the operation switches the border of DST. With this setting,
480 you are ignoring the effect of DST.
481
482 When $DST_ADJUST is set to false, then no adjustment is done, the
483 calculation will be based on the exact time difference.
484
485 You will see the difference through an example:
486
487 $Class::Date::DST_ADJUST=1;
488
489 print date("2000-10-29", "CET") + "1D";
490 # This will print 2000-10-30 00:00:00
491
492 print date("2001-03-24 23:00:00", "CET") + "1D";
493 # This will be 2001-03-25 23:00:00
494
495 print date("2001-03-25", "CET") + "1D";
496 # This will be 2001-03-26 00:00:00
497
498
499 $Class::Date::DST_ADJUST=0;
500
501 print date("2000-10-29", "CET") + "1D";
502 # This will print 2000-10-29 23:00:00
503
504 print date("2001-03-24 23:00:00", "CET") + "1D";
505 # This will be 2001-03-26 00:00:00
506
508 If you add or subtract "months" and "years" to a date, you may get
509 wrong dates, e.g when you add one month to 2001-01-31, you expect to
510 get 2001-02-31, but this date is invalid and converted to 2001-03-03.
511 Thats' why
512
513 date("2001-01-31") + '1M' - '1M' != "2001-01-31"
514
515 This problem can occur only with months and years, because others can
516 easily be converted to seconds.
517
519 $MONTH_BORDER_ADJUST variable is used to switch on or off the month-
520 adjust feature. This is used only when someone adds months or years to
521 a date and then the resulted date became invalid. An example: adding
522 one month to "2001-01-31" will result "2001-02-31", and this is an
523 invalid date.
524
525 When $MONTH_BORDER_ADJUST is false, this result simply normalized, and
526 becomes "2001-03-03". This is the default behaviour.
527
528 When $MONTH_BORDER_ADJUST is true, this result becomes "2001-02-28". So
529 when the date overflows, then it returns the last day insted.
530
531 Both settings keep the time information.
532
534 Since 1.0.11, Class::Date handle timezones natively on most platforms
535 (see the BUGS AND LIMITATIONS section for more info).
536
537 When the module is loaded, then it determines the local base timezone
538 by calling the Class::Date::local_timezone() function, and stores these
539 values into two variables, these are: $Class::Date::LOCAL_TIMEZONE and
540 $Class::Date::DEFAULT_TIMEZONE. The first value is used, when you call
541 the "localdate" function, the second value is used, when you call the
542 "date" function and you don't specify the timezone. There is a
543 $Class::Date::GMT_TIMEZONE function also, which is used by the "gmdate"
544 function, this is set to 'GMT'.
545
546 You can query the timezone of a date object by calling the $date->tz
547 method. Note this value returns the timezone as you specify, so if you
548 create the object with an unknown timezone, you will get this back. If
549 you want to query the effective timezone, you can call the $date->tzdst
550 method. This method returns only valid timezones, but it is not
551 necessarily the timezone which can be used to create a new object. For
552 example $date->tzdst can return 'CEST', which is not a valid base
553 timezone, because it contains daylight savings information also. On
554 Linux systems, you can see the possible base timezones in the
555 /usr/share/zoneinfo directory.
556
557 In Class::Date 1.1.6, a new environment variable is introduced:
558 $Class::Date::NOTZ_TIMEZONE. This variable stores the local timezone,
559 which is used, when the TZ environment variable is not set. It is
560 introduced, because there are some systems, which cannot handle the
561 queried timezone well. For example the local timezone is CST, it is
562 returned by the tzname() perl function, but when I set the TZ
563 environment variable to CST, it works like it would be GMT. The
564 workaround is NOTZ_TIMEZONE: if a date object has a timezone, which is
565 the same as NOTZ_TIMEZONE, then the TZ variable will be removed before
566 each calculation. In normal case, it would be the same as setting TZ to
567 $NOTZ_TIMEZONE, but some systems don't like it, so I decided to
568 introduce this variable. The $Class::Date::NOTZ_TIMEZONE variable is
569 set in the initialization of the module by removing the TZ variable
570 from the environment and querying the tzname variable.
571
573 This module uses operator overloading very heavily. I've found it quite
574 stable, but I am afraid of it a bit.
575
576 A Class::Date object is an array reference.
577
578 A Class::Date::Rel object is an array reference, which contains month
579 and second information. I need to store it as an array ref, because
580 array and month values cannot be converted into seconds, because of our
581 super calendar.
582
583 You can add code references to the @Class::Date::NEW_FROM_SCALAR and
584 @Class::Date::Rel::NEW_FROM_SCALAR. These arrays are iterated through
585 when a scalar-format date must be parsed. These arrays only have one or
586 two values at initialization. The parameters which the code references
587 got are the same as the "new" method of each class. In this way, you
588 can personalize the date parses as you want.
589
590 As of 0.90, the Class::Date has been rewritten. A lot of code and
591 design decision has been borrowed from Matt Sergeant's Time::Object,
592 and there will be some incompatibility with the previous public version
593 (0.5). I tried to keep compatibility methods in Class::Date. If you
594 have problems regarding this, please drop me an email with the
595 description of the problem, and I will set the compatibility back.
596
597 Invalid dates are Class::Date::Invalid objects. Every method call on
598 this object and every operation with this object returns undef or 0.
599
601 This module tries to be as full-featured as can be. It currently lacks
602 business-day calculation, which is planned to be implemented in the
603 1.0.x series.
604
605 I try to keep this module not to depend on other modules and I want
606 this module usable without a C compiler.
607
608 Currently the module uses the POSIX localtime function very
609 extensively. This makes the date calculation a bit slow, but provides
610 a rich interface, which is not provided by any other module. When I
611 tried to redesign the internals to not depend on localtime, I failed,
612 because there are no other way to determine the daylight savings
613 information.
614
616 There are two kind of adjustment in this module, DST_ADJUST and
617 MONTH_BORDER_ADJUST. Both of them makes the "+" and "-" operations
618 slower. If you don't need them, switch them off to achieve faster
619 calculations.
620
621 In general, if you really need fast date and datetime calculation,
622 don't use this module. As you see in the previous section, the focus of
623 development is not the speed in 1.0. For fast date and datetime
624 calculations, use Date::Calc module instead.
625
627 This module is NOT thread-safe, since it uses C library functions,
628 which are not thread-safe. Using this module in a multi-threaded
629 environment can cause timezones to be messed up. I did not put any
630 warning about it, you have to make sure that you understand this!
631
632 Under some circumstances in a mod_perl environment, you require the
633 Env::C module to set the TZ variable properly before calling the time
634 functions. I added the -EnvC import option to automatically load this
635 module if it is not loaded already. Please read the mod_perl
636 documentation about the environment variables and mod_perl to get the
637 idea why it is required sometimes:
638
639 http://perl.apache.org/docs/2.0/user/troubleshooting/troubleshooting.html#C_Libraries_Don_t_See_C__ENV__Entries_Set_by_Perl_Code
640
641 You are sure have this problem if the $Class::Date::NOTZ_TIMEZONE
642 variable is set to 'UTC', althought you are sure that your timezone is
643 not that. Try -EnvC in this case, but make sure that you are not using
644 it in a multi-threaded environment!
645
647 • Not all date/time values can be expressed in all timezones. For
648 example:
649
650 print date("2010-10-03 02:00:00", "Australia/Sydney")
651 # it will print 2010-10-03 03:00:00
652
653 No matter how hard you try you, you are not going to be able to
654 express the time in the example in that timezone. If you don't need
655 the timezone information and you want to make sure that the
656 calculations are always correct, please use GMT as a timezone (the
657 'gmdate' function can be a shortcut for it). In this case, you
658 might also consider turning off DST_ADJUST to speed up the
659 calculation.
660
661 • I cannot manage to get the timezone code working properly on
662 ActivePerl 5.8.0 on win XP and earlier versions possibly have this
663 problem also. If you have a system like this, then you will have
664 only two timezones, the local and the GMT. Every timezone, which is
665 not equal to $Class::Date::GMT_TIMEZONE is assumed to be local.
666 This seems to be caused by the win32 implementation of timezone
667 routines. I don't really know how to make this thing working, so I
668 gave up this issue. If anyone know a working solution, then I will
669 integrate it into Class::Date, but until then, the timezone support
670 will not be available for these platforms.
671
672 • Perl 5.8.0 and earlier versions has a bug in the strftime code on
673 some operating systems (for example Linux), which is timezone
674 related. I recommend using the strftime, which is provided with
675 Class::Date, so don't try to use the module without the compiled
676 part. The module will not work with a buggy strftime - the test is
677 hardcoded into the beginning of the code. If you anyway want to use
678 the module, remove the hardcoded "die" from the module, but do it
679 for your own risk.
680
681 • This module uses the POSIX functions for date and time
682 calculations, so it is not working for dates beyond 2038 and before
683 1902.
684
685 I don't know what systems support dates in 1902-1970 range, it may
686 not work on your system. I know it works on the Linux glibc system
687 with perl 5.6.1 and 5.7.2. I know it does not work with perl
688 5.005_03 (it may be the bug of the Time::Local module). Please
689 report if you know any system where it does _not_ work with perl
690 5.6.1 or later.
691
692 I hope that someone will fix this with new time_t in libc. If you
693 really need dates over 2038 and before 1902, you need to completely
694 rewrite this module or use Date::Calc or other date modules.
695
696 • This module uses Time::Local, and when it croaks, Class::Date
697 returns "Invalid date or time" error message. Time::Local is
698 different in the 5.005 and 5.6.x (and even 5.7.x) version of perl,
699 so the following code will return different results:
700
701 $a = date("2006-11-11")->clone(year => -1);
702
703 In perl 5.6.1, it returns an invalid date with error message
704 "Invali date or time", in perl 5.005 it returns an invalid date
705 with range check error. Both are false if you use them in boolean
706 context though, only the error message is different, but don't rely
707 on the error message in this case. It however works in the same way
708 if you change other fields than "year" to an invalid field.
709
711 Class::Date is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.
712
713 If you have questions, you can send questions directly to me:
714
715 dlux@dlux.hu
716
718 You can get a binary win32 version of Class::Date from Chris Winters'
719 .ppd repository with the following commands:
720
721 For people using PPM2:
722
723 c:\> ppm
724 PPM> set repository oi http://openinteract.sourceforge.net/ppmpackages/
725 PPM> set save
726 PPM> install Class-Date
727
728 For people using PPM3:
729
730 c:\> ppm
731 PPM> repository http://openinteract.sourceforge.net/ppmpackages/
732 PPM> install Class-Date
733
734 The first steps in PPM only needs to be done at the first time. Next
735 time you just run the 'install'.
736
738 Copyright (c) 2001 Szabó, Balázs (dLux)
739
740 All rights reserved. This program is free software; you can
741 redistribute it and/or modify it under the same terms as Perl itself.
742
743 Portions Copyright (c) Matt Sergeant
744
746 - Matt Sergeant <matt@sergeant.org>
747 (Lots of code are borrowed from the Time::Object module)
748 - Tatsuhiko Miyagawa <miyagawa@cpan.org> (bugfixes)
749 - Stas Bekman <stas@stason.org> (suggestions, bugfix)
750 - Chris Winters <chris@cwinters.com> (win32 .ppd version)
751 - Benoit Beausejour <bbeausej@pobox.com>
752 (Parts of the timezone code is borrowed from his Date::Handler module)
753
755 perl(1). Date::Calc(3pm). Time::Object(3pm). Date::Handler(3pm).
756
758 • dLux (Szabó, Balázs) <dlux@dlux.hu>
759
760 • Gabor Szabo <szabgab@gmail.com>
761
762 • Yanick Champoux <yanick@cpan.org>
763
765 This software is copyright (c) 2018, 2014, 2010, 2003 by Balázs Szabó.
766
767 This is free software; you can redistribute it and/or modify it under
768 the same terms as the Perl 5 programming language system itself.
769
770
771
772perl v5.36.0 2022-07-22 Class::Date(3)