📄 date_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>date.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.18 -->
<center>
<a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center>
<hr><h1>date.h</h1><div class="fragment"><pre>00001 <span class="comment">//-< DATE.H >--------------------------------------------------------*--------*</span>
00002 <span class="comment">// FastDB Version 1.0 (c) 1999 GARRET * ? *</span>
00003 <span class="comment">// (Main Memory Database Management System) * /\| *</span>
00004 <span class="comment">// * / \ *</span>
00005 <span class="comment">// Created: 30-Apr-2000 K.A. Knizhnik * / [] \ *</span>
00006 <span class="comment">// Last update: 30-Apr-2000 K.A. Knizhnik * GARRET *</span>
00007 <span class="comment">//-------------------------------------------------------------------*--------*</span>
00008 <span class="comment">// Date field type</span>
00009 <span class="comment">//-------------------------------------------------------------------*--------*</span>
00010
00011 <span class="preprocessor">#ifndef __DATE_H__</span>
00012 <span class="preprocessor"></span><span class="preprocessor">#define __DATE_H__</span>
00013 <span class="preprocessor"></span>
00014 <span class="preprocessor">#include "stdtp.h"</span>
00015 <span class="preprocessor">#include "class.h"</span>
00016
00017 BEGIN_FASTDB_NAMESPACE
00018
00019 <span class="preprocessor">#if !defined(NO_PTHREADS) && !defined(_WIN32)</span>
00020 <span class="preprocessor"></span><span class="preprocessor">#define USE_REENTRANT_LIBRARY</span>
00021 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
00022 <span class="preprocessor"></span>
00023 <span class="keyword">class </span>FASTDB_DLL_ENTRY dbDate {
00024 int4 jday;
00025 <span class="keyword">public</span>:
00026 <span class="keywordtype">bool</span> operator == (dbDate <span class="keyword">const</span>& dt) {
00027 <span class="keywordflow">return</span> jday == dt.jday;
00028 }
00029 <span class="keywordtype">bool</span> operator != (dbDate <span class="keyword">const</span>& dt) {
00030 <span class="keywordflow">return</span> jday != dt.jday;
00031 }
00032 <span class="keywordtype">bool</span> operator > (dbDate <span class="keyword">const</span>& dt) {
00033 <span class="keywordflow">return</span> jday > dt.jday;
00034 }
00035 <span class="keywordtype">bool</span> operator >= (dbDate <span class="keyword">const</span>& dt) {
00036 <span class="keywordflow">return</span> jday >= dt.jday;
00037 }
00038 <span class="keywordtype">bool</span> operator < (dbDate <span class="keyword">const</span>& dt) {
00039 <span class="keywordflow">return</span> jday < dt.jday;
00040 }
00041 <span class="keywordtype">bool</span> operator <= (dbDate <span class="keyword">const</span>& dt) {
00042 <span class="keywordflow">return</span> jday <= dt.jday;
00043 }
00044 <span class="keywordtype">int</span> operator - (dbDate <span class="keyword">const</span>& dt) {
00045 <span class="keywordflow">return</span> jday - dt.jday;
00046 }
00047 <span class="keywordtype">int</span> operator + (<span class="keywordtype">int</span> days) {
00048 <span class="keywordflow">return</span> jday + days;
00049 }
00050 dbDate& operator += (<span class="keywordtype">int</span> days) {
00051 jday += days;
00052 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00053 }
00054 dbDate& operator -= (<span class="keywordtype">int</span> days) {
00055 jday -= days;
00056 <span class="keywordflow">return</span> *<span class="keyword">this</span>;
00057 }
00058 <span class="keyword">static</span> dbDate current() {
00059 time_t now = time(NULL);
00060 <span class="keyword">struct </span>tm* tp;
00061 <span class="preprocessor">#ifdef USE_REENTRANT_LIBRARY</span>
00062 <span class="preprocessor"></span> <span class="keyword">struct </span>tm t;
00063 tp = localtime_r(&now, &t);
00064 <span class="preprocessor">#else </span>
00065 <span class="preprocessor"></span> tp = localtime(&now);
00066 <span class="preprocessor">#endif</span>
00067 <span class="preprocessor"></span> <span class="keywordflow">return</span> dbDate(tp->tm_year + 1900, tp->tm_mon + 1, tp->tm_mday);
00068 }
00069
00070 dbDate() {
00071 jday = -1;
00072 }
00073 <span class="keywordtype">bool</span> isValid()<span class="keyword">const</span> {
00074 <span class="keywordflow">return</span> jday != -1;
00075 }
00076
00077 <span class="keywordtype">unsigned</span> JulianDay() { <span class="keywordflow">return</span> jday; }
00078
00079 <span class="keywordtype">void</span> clear() { jday = -1; }
00080
00081 dbDate(<span class="keywordtype">int</span> year, <span class="keywordtype">int</span> month, <span class="keywordtype">int</span> day) {
00082 <span class="comment">/*</span>
00083 <span class="comment"> Convert Gregorian calendar date to the corresponding Julian day number</span>
00084 <span class="comment"> j. Algorithm 199 from Communications of the ACM, Volume 6, No. 8,</span>
00085 <span class="comment"> (Aug. 1963), p. 444. Gregorian calendar started on Sep. 14, 1752.</span>
00086 <span class="comment"> This function not valid before that.</span>
00087 <span class="comment"> */</span>
00088 nat4 c, ya;
00089 <span class="keywordflow">if</span> (month > 2)
00090 month -= 3;
00091 <span class="keywordflow">else</span> {
00092 month += 9;
00093 year--;
00094 } <span class="comment">/* else */</span>
00095 c = year / 100;
00096 ya = year - 100*c;
00097 jday = ((146097*c)>>2) + ((1461*ya)>>2) + (153*month + 2)/5 + day + 1721119;
00098 } <span class="comment">/* jday */</span>
00099
00100 <span class="keywordtype">void</span> MDY(<span class="keywordtype">int</span>& year, <span class="keywordtype">int</span>& month, <span class="keywordtype">int</span>& day)<span class="keyword"> const </span>{
00101 <span class="comment">/*</span>
00102 <span class="comment"> Convert a Julian day number to its corresponding Gregorian calendar</span>
00103 <span class="comment"> date. Algorithm 199 from Communications of the ACM, Volume 6, No. 8,</span>
00104 <span class="comment"> (Aug. 1963), p. 444. Gregorian calendar started on Sep. 14, 1752.</span>
00105 <span class="comment"> This function not valid before that.</span>
00106 <span class="comment"> */</span>
00107 nat4 j = jday - 1721119;
00108 <span class="keywordtype">int</span> m, d, y;
00109 y = (((j<<2) - 1) / 146097);
00110 j = (j<<2) - 1 - 146097*y;
00111 d = (j>>2);
00112 j = ((d<<2) + 3) / 1461;
00113 d = ((d<<2) + 3 - 1461*j);
00114 d = (d + 4)>>2;
00115 m = (5*d - 3)/153;
00116 d = 5*d - 3 - 153*m;
00117 d = (d + 5)/5;
00118 y = (100*y + j);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -