1Date::Manip::Problems(3U)ser Contributed Perl DocumentatiDoante::Manip::Problems(3)
2
3
4

NAME

6       Date::Manip::Problems - problems and bugs
7

KNOWN PROBLEMS

9       The following are not bugs in Date::Manip, but they may give some
10       people problems.
11
12       Unable to determine Time Zone
13           If you ever get the message that Date::Manip was unable to
14           determine the timezone, you need to provide that information to
15           your script.  Please refer to the Date::Manip::TZ documentation for
16           a discussion of this problem.
17
18       Calculations appear to be off by an hour
19           Due to daylight saving time (especially the spring change where the
20           time typically moves forward from 02:00 to 03:00), any date
21           calculation which would intuitively report a time in that range
22           will also move forward (or backward as the case may be).
23
24           *NOTE* This should be less of a problem since 6.30 with the
25           addition of semi-exact deltas.
26
27       Missing date formats
28           Due to the large number of date formats that Date::Manip CAN
29           process, people often assume that other formats that they want to
30           use should work as well, and when they don't, it comes as a
31           surprise.
32
33           With the much improved parsing of 6.00, many formats can be added
34           easily, though unless they are of general use, I'll probably
35           suggest that you use parse_format instead.
36
37           There is a class of formats that I do not plan to add however.
38
39           I have frequently been asked to add formats such as "the 15th of
40           last month", or "Monday of next week". I do not intend to add these
41           date formats to Date::Manip, but since I have received the request
42           several times, I decided to include my reasoning here.
43
44           Date::Manip can parse pretty much any static date format that I
45           could think of or find reference to. Dates such as "today", "Jan
46           12", or "2001-01-01" are all understood.
47
48           These are fairly limited however. Many very common date formats are
49           best thought of as a date plus a modification. For example,
50           "yesterday" is actually determined internally as "today" plus a
51           modification of "- 1 day".  "2nd Sunday in June" is determined as
52           "June 1" modified to the 2nd Sunday.
53
54           As these types of formats were added over time, I quickly realized
55           that the number of possible date plus modification formats was
56           huge. The number of combinations has caused the parsing in
57           Date::Manip to be quite complex, and adding new formats
58           occasionally causes unexpected conflicts with other formats.
59
60           The first time I received a request similar to "the 15th of last
61           month", I intended to add it, but as I analyzed it to see what
62           changes needed to be made to support it, I realized that this
63           needed to be expressed as a date plus TWO modifications. In other
64           words, today modified to last month modified to the 15th day of the
65           month.
66
67           As bad as date plus modification formats are, a date plus TWO
68           modifications would be exponentially worse. On realizing that, I
69           decided that Date::Manip will not support this type of format.
70
71           Although I apologize for the inconvenience, I do not intend to
72           change my position on this.
73
74       Date::Manip is slow
75           Date::Manip is one of the slower Date/Time modules due to the fact
76           that it is huge and written entirely in perl.  I have done a lot of
77           work optimizing it since 6.xx came out, and additional work is
78           planned, but even at it's best, it will probably be slower than
79           other modules.
80
81           Some things that will definitely help:
82
83           Date::Manip 5.xx was very slow.  A lot of work went into speeding
84           it up as I rewrote it for the 6.xx release, and it should be noted
85           that initial tests show version 6.xx to be around twice as fast as
86           5.xx.  There is one notable exception to this speedup.  If you use
87           Date::Manip to parse dates from a wide variety of timezones, 6.xx
88           will be significantly slower than 5.xx.  The reason for this is
89           that each time a new timezone is accessed, 6.xx does quite a bit of
90           work to initialize it.  5.xx does not have this overhead, so it can
91           parse dates from any number of timezones without a speed penalty.
92           However, 5.xx does NOT handle timezones correctly, so many of the
93           dates will be incorrect.  If timezones are important to you, there
94           is no way to use 5.xx and get accurate results.
95
96           If you only parse dates from a single timezone (which is more often
97           what you are doing), 6.xx is significantly faster than 5.xx.
98
99           ISO-8601 dates are parsed first and fastest.  If you have the
100           flexibility to define the date format, use ISO-8601 formats
101           whenever possible.
102
103           Avoid parsing dates that are referenced against the current time
104           (in 2 days, today at noon, etc.).  These take a lot longer to
105           parse.
106
107           Business date calculations are extremely slow.  You should consider
108           alternatives if possible (i.e. doing the calculation in exact mode
109           and then multiplying by 5/7).  Who needs a business date more
110           accurate than "6 to 8 weeks" anyway, right :-)
111
112       Memory leak
113           There is a known memory leak in perl related to named regexp
114           captures that directly affects Date::Manip . The leak is in all
115           versions of perl up to (and including) the following versions:
116
117              5.10.1
118              5.12.5
119              5.14.3
120              5.15.5
121
122           The bug has been fixed in:
123
124              5.15.6
125              5.16.0
126
127           If a maintenance release is done for any of the other releases
128           (5.10, 5.12, 5.14), that includes the patch, I'll update this
129           section to include that information.
130
131           Date::Manip 5.xx is not susceptible, so using it may be a feasible
132           workaround, but if you need accurate timezone handling, this isn't
133           possible.
134
135           Simple tests estimate the leak to be about 3 MB per 10,000 dates
136           parsed, so unless you're parsing hundreds of thousands, or millions
137           of dates, the leak probably won't be a problem on systems with
138           moderate amounts of memory. And if you're parsing that many dates,
139           the relatively slow Date::Manip may not be the correct module for
140           you to use anyway.
141
142       Dmake error on strawberry perl
143           Users of Strawberry perl on windows may encounter an error similar
144           to the following:
145
146              dmake: makefile: line 3016: Error: -- Input line too long, increase MAXLINELENGTH
147
148           This is a known problem with some versions of strawberry perl, and
149           I can't fix it in Date::Manip.  If you encounter this problem, you
150           can install the package manually using the commands:
151
152              c:> cpan
153              cpan> look Date::Manip::Date
154              > perl Makefile.PL
155              > dmake MAXLINELENGTH=300000 make
156              > dmake MAXLINELENGTH=300000 make test
157              > dmake MAXLINELENGTH=300000 make install
158
159           You can find more details here:
160
161              http://www.nntp.perl.org/group/perl.win32.vanilla/2011/02/msg287.html
162
163       Using functions/methods which are not supported
164           There have been a handful of incidents of people using a function
165           from Date::Manip which were not documented in the manual.
166
167           Date::Manip consists of a large number of user functions which are
168           documented in the manual. These are designed to be used by other
169           programmers, and I will not make any backwards incompatible changes
170           in them unless there is a very compelling reason to do so, and in
171           that case, the change will be clearly documented in the
172           Date::Manip::Changes6 documentation for this module.
173
174           Date::Manip also includes a large number of functions which are NOT
175           documented. These are for internal use only.  Please do not use
176           them!  I can (and do) change their functionality, and even their
177           name, without notice, and without apology!  Some of these internal
178           functions even have test scripts, but that is not a guarantee that
179           they will not change, nor is any support implied. I simply like to
180           run regression tests on as much of Date::Manip as possible.
181
182           As of the most recent versions of Date::Manip, all internal
183           functions have names that begin with an underscore (_). If you
184           choose to use them directly, it is quite possible that new versions
185           of Date::Manip will cause your programs to break due to a change in
186           how those functions work.
187
188           Any changes to internal functions will not be documented, and will
189           not be regarded by me as a backwards incompatibility. Nor will I
190           (as was requested in one instance) revert to a previous version of
191           the internal function.
192
193           If you feel that an internal function is of more general use, feel
194           free to contact me with an argument of why it should be "promoted".
195           I welcome suggestions and will definitely consider any such
196           request.
197
198       RCS Control
199           If you try to put Date::Manip under RCS control, you are going to
200           have problems.  Apparently, RCS replaces strings of the form
201           "$Date...$" with the current date.  This form occurs all over in
202           Date::Manip.  To prevent the RCS keyword expansion, checkout files
203           using:
204
205              co -ko
206
207           Since very few people will ever have a desire to do this (and I
208           don't use RCS), I have not worried about it, and I do not intend to
209           try to workaround this problem.
210

KNOWN COMPLAINTS

212       Date::Manip 6.xx has gotten some complaints (far more than 5.xx if the
213       truth be told), so I'd like to address a couple of them here.  Perhaps
214       an understanding of why some of the changes were made will allay some
215       of the complaints.  If not, people are always welcome to stick with the
216       5.xx release. I will continue to support the 5.xx releases for a couple
217       years (though I do NOT plan to add functionality to it).
218
219       These complaints come both from both the CPAN ratings site:
220
221          http://cpanratings.perl.org/dist/Date-Manip
222
223       and from personal email.
224
225       Requires perl 5.10
226           The single most controversial change made in 6.00 is that it now
227           required perl 5.10.0 or higher. Most of the negative feedback I've
228           received is due to this.
229
230           In the past, I've avoided using new features of perl in order to
231           allow Date::Manip to run on older versions of perl.  Prior to perl
232           5.10, none of the new features would have had a major impact on how
233           Date::Manip was written so this practice was justified. That all
234           changed with the release of perl 5.10.
235
236           One of the aspects of Date::Manip that has received the most
237           positive response is the ability to parse almost every conceivable
238           date format.  Unfortunately, as I've added formats, the parsing
239           routine became more and more complicated, and maintaining it was
240           one of the least enjoyable aspect in maintaining Date::Manip . In
241           fact, for several years I'd been extremely reluctant to add new
242           formats due to the fact that too often, adding a new format broke
243           other formats.
244
245           As I was rewriting Date::Manip, I was looking for ways to improve
246           the parsing and to make maintaining it easier. Perl 5.10 provides
247           the feature "named capture buffers". Named capture buffers not only
248           improves the ease of maintaining the complex regular expressions
249           used by Date::Manip, it makes it dramatically easier to add
250           additional formats in a way that is much less likely to interfere
251           with other formats. The parsing in 6.00 is so much more robust,
252           extensible, and flexible, that it will make parser maintenance
253           possible for many years to come at a fraction of the effort and
254           risk.
255
256           It was too much to turn down. Hopefully, since 5.10 has been out
257           for some time now, this will not prohibit too many people from
258           using the new version of Date::Manip. I realize that there are many
259           people out there using older versions of perl who do not have the
260           option of upgrading perl.  The decision to use 5.10 wasn't made
261           lightly... but I don't regret making it. I apologize to users who,
262           as a result, cannot use 6.00 . Hopefully in the future you'll be
263           able to benefit from the improvements in 6.00.
264
265           One complaint I've received is that this in some way makes
266           Date::Manip backwards incompatible, but this is not an accurate
267           complaint. Version 6.xx DOES include some backwards
268           incompatibilities (and these are covered in the
269           Date::Manip::Migration5to6 document), however in almost all cases,
270           these incompatibilities are with infrequently used features, or
271           workarounds are in place to allow deprecated features to continue
272           functioning for some period of time.
273
274           Though I have no data to confirm this, I suspect that 90% or more
275           of all scripts which were written with Date::Manip 5.xx will
276           continue to work unmodified with 6.xx (of course, you should still
277           refer to the migration document to see what features are deprecated
278           or changed to make sure that you don't need to modify your script
279           so that it will continue to work in the future). Even with scripts
280           that need to be changed, the changes should be trivial.
281
282           So, Date::Manip 6.xx is almost entirely backward compatible with
283           5.xx (to the extent that you would expect any major version release
284           to be compatible with a previous major version).
285
286           The change is only in the requirements necessary to get Date::Manip
287           6.xx to run.
288
289           Obviously, it's not reasonable to say that Date::Manip should never
290           be allowed to switch minimum perl versions. At some point, you have
291           to let go of an old version if you want to make use of the features
292           of the newer version. The question is, did I jump to 5.10 too fast?
293
294           The negative ratings I see in the CPAN ratings complain that I no
295           longer support perl 5.6 and perl 5.8.
296
297           With respect to 5.6, perl 5.6 was released in March of 2000 (that's
298           before Windows XP which was released in 2001). Date::Manip 6.00 was
299           released at the end of 2009.  To be honest, I don't really feel
300           much sympathy for this complaint. Software that is 9 years old is
301           ANCIENT.  People may choose to use it... but please don't complain
302           when new software comes out that doesn't support it.
303
304           The argument for perl 5.8 is much more compelling. Although 5.8 was
305           released well before Date::Manip 6.00 (July of 2002), there were no
306           major perl releases until 5.10 came out in December of 2007, so 5.8
307           was state-of-the art as little as 2 years prior to the release of
308           Date::Manip 6.xx.
309
310           I agree completely with the argument that abandoning 5.8 only 2
311           years after it was the current version is too soon. For that
312           reason, I continued to support the Date::Manip 5.xx releases for
313           several years.  As of December 2012 (5 years after the release of
314           perl 5.10), the 5.xx release is no longer supported (in that I will
315           not patch it or provide support for it's use).  However, it is
316           still bundled into the Date::Manip distribution so it can still be
317           used.  I do not have any plans for removing it, though I may do so
318           at some point.
319
320       Too many modules
321           One minor complaint is that there are too many files. One person
322           specifically objects to the fact that there are over 470 modules
323           covering non-minute offsets. This complaint is (IMO) silly.
324
325           Date::Manip supports ALL historical time zones, including those
326           with non-minute offsets, and so there will be information for those
327           time zones, even though they are not currently in use.
328
329           I could of course store all of the information in one big module,
330           but that means that you have to load all of that data every time
331           you use Date::Manip, and I find that to be a very poor solution.
332           Instead, storing the information in a per-time zone and per-offset
333           manner dramatically decreases the amount of data that has to be
334           loaded.
335
336           While it is true that Date::Manip includes over 900 modules for all
337           of the time zone information, most implementations of time zone
338           handling also choose to break up the data into a large number of
339           files.
340
341           My linux distribution (openSuSE 11.2 at the time of writing this)
342           uses the standard zoneinfo database, and at this point, there are
343           over 1700 files included in /usr/share/zoneinfo (though it does
344           appear that there is some duplication of information). Current
345           versions of RedHat also use over 1700 files, so Date::Manip isn't
346           treating the time zone data in a new or unreasonable way.
347
348       Objects are large
349           One complaint that was put on the CPAN ratings site was that the OO
350           interface is "a dud" due to the size of it's objects. The complaint
351           is that a Date::Manip::Date object is 115K while it should
352           (according to the complaint) only require that you need to save the
353           seconds from the epoch, zone, and a couple other pieces of
354           information, all of which could probably be stored in 100 bytes or
355           less.
356
357           This complaint is not accurate, and comes from a misunderstanding
358           of the objects used by Date::Manip.
359
360           Date::Manip is very configurable, and contains a great deal of
361           information which could theoretically be calculated on the fly, but
362           which would greatly reduce it's performance. Instead, in the
363           interest of improving performance, the data is cached, and since
364           the data is virtually all potentially object specific, it has to be
365           somehow linked to the object.
366
367           For example, Date::Manip allows you to parse dates in several
368           languages.  Each language has a large number of regular expressions
369           which are used to do the actual parsing. Instead of recreating
370           these regular expressions each time they are needed, they are
371           created once and stored in an object (specifically, a
372           Date::Manip::Base object).  The size of the Date::Manip::Base
373           object is almost 15K (due primarily to the regular expressions used
374           in parsing dates in the selected language).
375
376           Similarly, a description of the time zones are stored in a second
377           object (a Date::Manip::TZ object).  The size of the Date::Manip::TZ
378           object starts at 100K. That may seem excessive, but you have to
379           remember that there are almost 500 time zones, and they have to be
380           indexed by name, alias, abbreviation, and offset.  In addition,
381           critical dates (dates where the offset from GMT change such as
382           during a daylight saving time change) along with information such
383           as offsets, abbreviation, etc., are all cached in order to improve
384           performance.  By the time you do this, it does take a fair bit of
385           space.  It should also be noted that the full description of each
386           timezone is only stored in the object when the timezone is actually
387           used, so if you use a lot of timezones, this object will grow
388           slowly as new timezones are used.
389
390           The size of the actual Date::Manip::Date object is a little over
391           300 bytes.  However, each includes a pointer to a Date::Manip::Base
392           and a Date::Manip::TZ object (and due to how the object was being
393           looked at in the complaint, they were reporting the size of all
394           three objects, NOT just the Date::Manip::Date object).
395
396           Both the Date::Manip::Base and Date::Manip::TZ objects are reused
397           by any number of Date::Manip::Date objects. They can almost be
398           thought of as global data, except that they are accessible in the
399           standard OO manner, and you are allowed to modify them on a per-
400           object basis which WILL mean that you have to store more data. If
401           you work with multiple configurations (see Date::Manip::Config),
402           you'll need multiple Base and TZ objects. However, most of the time
403           you will not need to do this.
404
405           The actual Date::Manip::Date object is a bit larger than suggested
406           in the complaint, but it should be noted that Date::Manip actually
407           stores the dates in a number of different formats (a string of the
408           form YYYYMMDDHH:MN:SS and a list [YYYY,MM,DD,HH,MN,SS] in the time
409           zone it was parsed in, the local time zone (if different) and GMT.
410           By caching this information as it is used, it has a huge impact on
411           the performance.
412
413           So, Date::Manip in typical usage consists of one 100K
414           Date::Manip::TZ object, one 15K Date::Manip::Base objects, and any
415           number of small 300 byte Date::Manip::Date objects.
416           Date::Manip::Delta objects are even smaller. Date::Manip::Recur
417           objects are also small, but they contain any number of Date objects
418           in them.
419
420           I am certainly open to suggestions as to how I can improve the OO
421           interface... but I don't believe it is a dud. While I'm not an
422           expert at OO programming, I believe that I followed pretty standard
423           and accepted procedures for accessing the data.
424
425           Please refer to the Date::Manip::Objects document for more
426           information.
427
428       Date::Manip has an inconsistent interface
429           I've gotten a few complaints that the interface to Date::Manip is
430           inconsistent... and I agree (at least when referring to the
431           functional interfaces).
432
433           Date::Manip was originally written in an unplanned way... as a
434           need/want came up, it was extended. That's not the way to write a
435           major package of course, but it wasn't expected to be a major
436           package at the start.
437
438           As it became more and more widely used, I too wished for a more
439           consistent interface, but I did not want to break backward
440           compatibility for everyone using it.
441
442           When 6.xx was written, I spent a good deal of time trying to make a
443           very standard OO interface, so I do not believe that this complaint
444           can be applied to the OO interface (though I'm interested in
445           suggestions for improving it of course).
446
447           As far as the functional interface goes, I'll continue to support
448           it in a backward compatible (and therefore inconsistent) form. I'd
449           encourage the use of the OO interface whenever possible.
450

BUGS AND QUESTIONS

452       If you find a bug in Date::Manip, there are three ways to send it to
453       me.  Any of them are fine, so use the method that is easiest for you.
454
455       Direct email
456           You are welcome to send it directly to me by email.  The email
457           address to use is:  sbeck@cpan.org.
458
459       CPAN Bug Tracking
460           You can submit it using the CPAN tracking too.  This can be done at
461           the following URL:
462
463           <http://rt.cpan.org/Public/Dist/Display.html?Name=Date-Manip>
464
465       GitHub
466           You can submit it as an issue on GitHub.  This can be done at the
467           following URL:
468
469           <https://github.com/SBECK-github/Date-Manip>
470
471       Please do not use other means to report bugs (such as forums for a
472       specific OS or Linux distribution) as it is impossible for me to keep
473       up with all of them.
474
475       When filing a bug report, please include the following information:
476
477       Date::Manip version
478           Please include the version of Date::Manip you are using.  You can
479           get this by using the script:
480
481              use Date::Manip;
482              print DateManipVersion(1),"\n";
483
484           or
485
486              use Date::Manip::Date;
487              $obj = new Date::Manip::Date;
488              print $obj->version(1),"\n";
489
490       Perl information
491           Please include the output from "perl -V"
492
493       If you have a problem using Date::Manip that perhaps isn't a bug (can't
494       figure out the syntax, etc.), you're in the right place.  Start by
495       reading the main Date::Manip documentation, and the other documents
496       that apply to whatever you are trying to do.  If this still doesn't
497       answer your question, mail me directly.
498
499       I would ask that you be reasonably familiar with the documentation
500       BEFORE you choose to do this. Date::Manip is a hobby, and I simply do
501       not have time to respond to hundreds of questions which are already
502       answered in this manual.
503
504       If you find any problems with the documentation (errors, typos, or
505       items that are not clear), please send them to me. I welcome any
506       suggestions that will allow me to improve the documentation.
507

KNOWN BUGS

509       None known.
510

SEE ALSO

512       Date::Manip        - main module documentation
513

LICENSE

515       This script is free software; you can redistribute it and/or modify it
516       under the same terms as Perl itself.
517

AUTHOR

519       Sullivan Beck (sbeck@cpan.org)
520
521
522
523perl v5.32.0                      2020-12-15          Date::Manip::Problems(3)
Impressum