summaryrefslogtreecommitdiff
path: root/libmailutils/datetime/doy.c
diff options
context:
space:
mode:
authorSergey Poznyakoff <gray@gnu.org.ua>2011-12-08 17:04:29 +0200
committerSergey Poznyakoff <gray@gnu.org.ua>2011-12-08 18:33:56 +0200
commitacec689ef648adaa5c420049bfb775953e184bda (patch)
treeac5a96099e5a646fc24986650b4f9073c9e83642 /libmailutils/datetime/doy.c
parent5af1d3a7bd8149139ad59baa11501e3d11b138a7 (diff)
downloadmailutils-acec689ef648adaa5c420049bfb775953e184bda.tar.gz
mailutils-acec689ef648adaa5c420049bfb775953e184bda.tar.bz2
Revamp date/time calculations.
* configure.ac: Build libmailutils/datetime/Makefile.am * include/mailutils/datetime.h (mu_datetime_julianday) (mu_datetime_dayofweek,mu_datetime_dayofyear) (mu_datetime_year_days): New protos. * libmailutils/Makefile.am (SUBDIRS): Add datetime (libmailutils_la_LIBADD): Add libdatetime.la * libmailutils/base/Makefile.am (libbase_la_SOURCES): Remove date.c and strftime.c. * libmailutils/base/date.c: Remove. * libmailutils/base/strftime.c: Move to libmailutils/datetime * libmailutils/datetime/Makefile.am: New file. * libmailutils/datetime/dow.c: New file. * libmailutils/datetime/doy.c: New file. * libmailutils/datetime/jd.c: New file. * libmailutils/datetime/scantime.c: New file. * libmailutils/datetime/streamftime.c: New file. * libmailutils/datetime/tab.c: New file. * libmailutils/datetime/unixtime.c: New file. * libmailutils/datetime/utcoff.c: New file. * libmailutils/datetime/yd.c: New file. * libmailutils/tests/scantime.at: Fix yday numbers.
Diffstat (limited to 'libmailutils/datetime/doy.c')
-rw-r--r--libmailutils/datetime/doy.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/libmailutils/datetime/doy.c b/libmailutils/datetime/doy.c
new file mode 100644
index 000000000..49883cd32
--- /dev/null
+++ b/libmailutils/datetime/doy.c
@@ -0,0 +1,53 @@
+/* GNU Mailutils -- a suite of utilities for electronic mail
+ Copyright (C) 2011 Free Software Foundation, Inc.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 3 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General
+ Public License along with this library. If not, see
+ <http://www.gnu.org/licenses/>. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <stdlib.h>
+#include <mailutils/datetime.h>
+
+static int month_start[]=
+ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };
+ /* Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
+ 31 28 31 30 31 30 31 31 30 31 30 31
+ */
+
+#define leap_year(y) ((y) % 4 == 0 && ((y) % 100 != 0 || (y) % 400 == 0))
+
+/* Compute number of days since January 1 to the given day of year. */
+int
+mu_datetime_dayofyear (int year, int month, int day)
+{
+ int leap, month_days;
+
+ if (year < 0 || month < 1 || month > 12 || day < 1)
+ return -1;
+
+ leap = leap_year (year);
+
+ month_days = month_start[month] - month_start[month - 1]
+ + ((month == 2) ? leap : 0);
+
+ if (day > month_days)
+ return -1;
+
+ if (month <= 2)
+ leap = 0;
+
+ return month_start[month-1] + day + leap;
+}

Return to:

Send suggestions and report system problems to the System administrator.