Provided by: libdate-manip-perl_6.95-1_all bug

NAME

       Date::Manip::Misc - Miscellaneous information about Date::Manip

SHOULD I USE DATE::MANIP

       If you look in CPAN, you'll find that there are a number of Date and Time packages.  Is Date::Manip the
       one you should be using? That isn't a trivial question to answer. It depends to a large extent on what
       you are trying to do.

       Date::Manip is certainly one of the most powerful of the Date modules (the other main contender being the
       DateTime suite of modules).  I'm trying to build a library which can do _EVERY_ conceivable date/time
       manipulation that you'll run into in everyday life dealing with the Gregorian calendar.  To the best of
       my knowledge, it will do everything that any other date module will do which work with the Gregorian
       calendar, and there are a number of features that Date::Manip has that other modules do not have.

       There is a tradeoff in being able to do "everything"... and that tradeoff is primarily in terms of
       performance.  Date::Manip is written entirely in Perl and is the largest of the date modules. Other
       modules tend to be faster than Date::Manip, and modules written in C are significantly faster than their
       Perl counterparts (at least if they're done right).  Although I am working on making Date::Manip faster,
       it will never be as fast as other modules.  And before anyone asks, Date::Manip will never be translated
       to C (at least by me).  I write C because I have to.  I write Perl because I like to.  Date::Manip is
       something I do because it interests me, not something I'm paid for.

       If you are going to be using the module in cases where performance is an important factor, and you're
       doing a fairly small set of simple date operations over and over again, you should carefully examine the
       other date modules to see if they will meet your needs.

       Date::Manip does NOT provide functionality for working with alternate calendars such as the Chinese or
       Hebrew calendars, so if you need that functionality, you definitely need to look elsewhere (the DateTime
       suite probably).

       On the other hand, if you want one solution for all your date needs, don't need peak speed, or are trying
       to do more exotic date operations, Date::Manip is for you.  Operations on things like business dates,
       foreign language dates, holidays and other recurring events, complete timezone handling, etc. are
       available more-or-less exclusively in Date::Manip. At the very least, if you want to be able to do these
       operations, it will require using several other modules, each with it's own interface.  Also, when you
       work with Date::Manip, you work with one author and one module.  The DateTime suite currently consists of
       almost 100 modules and 75 authors.

       In addition, I am making significant performance improvements in Date::Manip.  Although it will never be
       as fast as some of the other perl modules, I believe that it is already competitive enough for most
       purposes, and I continue to look for places where I can improve performance, so performance should
       improve over time.

YEAR 2000 AND YEAR 2007 DST CHANGE

       Did Date::Manip have any problems with Y2K compliance? Did it have any problems with the revised daylight
       saving time changes made in 2007?

       Although Date::Manip will parse many date strings (including dates with 2-digit years), internally they
       are stored as a 4 digit year, and all operations are performed using this internal representation, so
       Date::Manip had no problems with the Y2K issue. Of course, applications written which stored the year as
       2 digits (whether or not it used Date::Manip) may have had problems, but they were not because of this
       module.

       Similarly for the 2007 changes in daylight saving time made in the United States, Date::Manip was not
       affected. Date::Manip makes use of the current time zone, but it gets that information from the operating
       system the application is running on. If the operating system knows about the new daylight saving time
       rules... so does Date::Manip.

WHAT DATES ARE DATE::MANIP USEFUL FOR?

       Date::Manip applies to the Gregorian calendar. It does not support alternative calendars (Hebrew, Mayan,
       etc.) so if you want to use an alternative calendar, you'll need to look elsewhere.

       The Gregorian calendar is a relatively recent innovation. Prior to it, the Julian calendar was in use.
       The Julian calendar defined leap years as every 4th year.  This led to significant calendar drift over
       time (since a year is NOT 365.25 days long). It was replaced by the Gregorian calendar which improved the
       definition of leap years, and at that point, the calendar was adjusted appropriately.

       Date::Manip extrapolates the Gregorian calendar back to the year 0001 AD and forward to the year 9999 AD,
       but that does not necessarily mean that the results are useful. As the world adopted the Gregorian
       calendar, the dates using the Julian calendar had to be changed to fit to account for the drift that had
       occurred. As such, the dates produced by Date::Manip in an era where the Julian calendar was in use do
       not accurately reflect the dates actually in use. In historical context, the Julian calendar was in use
       until 1582 when the Gregorian calendar was adopted by the Catholic church.  Protestant countries did not
       accept it until later; Germany and Netherlands in 1698, British Empire in 1752, Russia in 1918, etc.
       Date::Manip is therefore not equipped to truly deal with historical dates prior to about 1600, and
       between 1600 and 1900, the calendar varied from country to country.

       A second problem is that the Gregorian calendar is itself imperfect and at some point may need to be
       corrected (though it's not clear that this will happen... drift may now be accounted for using leap
       seconds which means that the Gregorian calendar may be useful indefinitely).  No attempt is made to
       correct for the problems in the Gregorian calendar for a couple reasons. First is that my great great
       great grandchildren will be long dead before this begins to be a problem, so it's not an immediate
       concern.  Secondly, and even more importantly, I don't know what the correction will be (if any) or when
       it will be implemented, so I can safely ignore it.

       There is some limitation on how dates can be expressed such that Date::Manip can handle them correctly.
       Date::Manip stores the year internally as a 4-digit number. This is obviously not a limit due to the
       Gregorian calendar, but I needed a way to store the dates internally, and the 4-digit year was chosen. I
       realize that the 4-digit limitation does create a time when it will break (quite similar to those who
       chose a 2-digit representation set themselves up for the Y2K problem). Frankly, I'm not too concerned
       about this since that date is 8000 years in the future! Date::Manip won't exist then.  Perl won't exist
       then. And it's quite possible that the Gregorian calendar won't exist then. That's a much different
       situation than the Y2K choice in which programmers chose a representation that would break within the
       lifetime of the programs they were writing.

       Given the 4-digit limitation, Date::Manip definitely can't handle BC dates, or dates past Dec 31, 9999.
       So Date::Manip works (in theory) during the period Jan 1, 0001 to Dec 31, 9999. There are a few caveats:

       Gregorian calendar issue
           In  practical  terms, Date::Manip deals with the Gregorian calendar, and is most useful in the period
           that that calendar has been, or will be, in effect. As explained above, the Gregorian  calendar  came
           into  universal  acceptance  in  the  early  1900's,  and it should remain in use for the foreseeable
           future.

           So...  in practical terms, Date::Manip is probably useful from around 1900 through  several  thousand
           years from now.

       First/last week
           In  one  part  of  the  code (calculating week-of-year values), Date::Manip references dates one week
           after and one week before the date actually being worked on. As such, dates during the first week  in
           the  year  0001  fail  (because a week before is in the year 1 BC), and those in the last week in the
           year 9999 fail (because a week later is in 10,000).

           No effort will be made to correct this because the added functionality is simply not  that  important
           (to  me),  especially  since  the  Gregorian  calendar doesn't really apply in either instance. To be
           absolutely safe, I will state that Date::Manip works as described in this manual  during  the  period
           Feb  1,  0001  to Nov 30, 9999, and I will only support dates within that range (i.e. if you submit a
           bug using a date that is not in that range, I will will consider myself free to ignore it).

       Leap seconds
           Date::Manip does NOT make use of the leap seconds in calculating time intervals,  so  the  difference
           between two times may not be strictly accurate due to the addition of a leap second.

       Three-digit years
           Date::Manip  will  parse both 2- and 4-digit years, but it will NOT handle 3 digit years.  So, if you
           store the year as an offset from 1900 (which is 3 digits long as of the year 2000), these will NOT be
           parseable by Date::Manip. Since the perl functions localtime and gmtime DO  return  the  year  as  an
           offset  from  1900,  the  output from these will need to be corrected (probably by adding 1900 to the
           result) before they can be passed to any Date::Manip routine.

FUTURE IDEAS

       A number of changes are being considered for future inclusion in Date::Manip.  As  a  rule,  the  changes
       listed below are not finalized, and are open to discussion.

       Rewrite parsing for better language support
           Currently,  all  of  Date::Manip's  parsing  is based on English language forms of dates, even if the
           words have been replaced by the equivalent in some other language.

           I am considering rewriting the parsing routines in order to allow date forms that might  be  used  in
           other  languages  but  do not have a common English equivalent, and to account for the fact that some
           English formats may not have an equivalent in another language.

       Adding granularity
           The granularity of a time basically refers to how accurate you wish to treat a date.  For example, if
           you want to compare two dates to see if they are identical at a granularity of days, then  they  only
           have  to  occur  on  the same day.  At a granularity of an hour, they have to occur within an hour of
           each other, etc.

           I'm not sure how useful this would be, but it's one of the oldest unimplemented  ideas,  so  I'm  not
           discarding it completely.

ACKNOWLEDGMENTS

       There  are  many  people  who have contributed to Date::Manip over the years that I'd like to thank.  The
       most important contributions have come in the form of suggestions and bug reports by users.  I have tried
       to include the name of every person who first suggested each improvement  or  first  reported  each  bug.
       These  are included in the Date::Manip::Changes5 and Date::Manip::Changes6 documents.  The list is simply
       too long to appear here, but I appreciate their help.

       A number of people have made suggestions or reported bugs which are not  mentioned  in  these  documents.
       These  include  suggestions  which have not been implemented and people who have made a suggestion or bug
       report which has already been suggested/reported by someone else.  For those who's suggestions  have  not
       yet  been implemented, they will be added to the appropriate Changes document when (if) their suggestions
       are implemented.  I keep  every  single  suggestion  I've  ever  received  and  periodically  review  the
       unimplemented ones to see if it's something I'm interested in, so even suggestions made years in the past
       may still appear in future versions of Date::Manip, and the original requester will be attributed at that
       point  (some  of  the changes made to Date::Manip 6.00 were based on suggestions 10 years old which never
       fit in with version 5.xx, but which  I  knew  I  wanted  to  implement).  For  those  who  have  sent  in
       requests/reports  that  had  been previously made by someone else, thank you too.  I'd much rather have a
       suggestion made twice than not at all.

       Thanks to Alan Cezar and Greg Schiedler for paying me to implement the Events_List routine.  They gave me
       the idea, and were then willing to pay me for my time to get it implemented quickly.

       I'd also like to thank a couple of authors.  Date::Manip has gotten some really good press in a couple of
       books.  Since no one's paying me to write Date::Manip, seeing my module get  a  good  review  in  a  book
       written  by  someone else really makes my day.  My thanks to Nate Padwardhan and Clay Irving (Programming
       with Perl Modules -- part of the O'Reilly Perl Resource Kit); and Tom Christiansen and Nathan  Torkington
       (The  Perl  Cookbook).   Also, thanks to any other authors who've written about Date::Manip who's books I
       haven't seen.

       I'd also like to thank the people who are maintaining the zoneinfo database (and who replied  quickly  to
       several inquiries).

       I  have  borrowed from other modules. I originally borrowed the code for determining if a year was a leap
       year from code written by David Muir Sharnoff.  I borrowed many of the original date printf formats  from
       code  written by Terry McGonigal as well as the Solaris date command.  More recently, I borrowed the code
       to do time zone registry lookups on Windows from the DateTime-TimeZone module, though  I  rewrote  it  to
       work better with Date::Manip.

BUGS AND QUESTIONS

       Please  refer  to  the  Date::Manip::Problems  documentation for information on submitting bug reports or
       questions to the author.

SEE ALSO

       Date::Manip        - main module documentation

LICENSE

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

AUTHOR

       Sullivan Beck (sbeck@cpan.org)

perl v5.38.2                                       2024-03-02                             Date::Manip::Misc(3pm)