transactd 2.4.5 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CMakeLists.txt +1 -1
- data/README-JA.md +52 -529
- data/README.md +52 -523
- data/bin/common/tdclc_32_3_0.dll +0 -0
- data/bin/common/tdclc_64_3_0.dll +0 -0
- data/build/common/system.cmake +2 -1
- data/build/common/transactd_cl_common.cmake +3 -6
- data/build/swig/ruby/ruby.swg +85 -28
- data/build/swig/ruby/tdclrb_wrap.cpp +3195 -1578
- data/build/swig/tdcl.i +161 -5
- data/build/tdclc/CMakeLists.txt +1 -0
- data/build/tdclc/tdclc.cbproj +7 -1
- data/build/tdclc/tdclc.rc +4 -4
- data/build/tdclcpp/tdclcpp.rc +4 -4
- data/build/tdclcpp/tdclcpp_bc.cbproj +2 -5
- data/build/tdclrb/tdclrb.rc +4 -4
- data/source/bzs/db/blobStructs.h +1 -1
- data/source/bzs/db/engine/mysql/database.cpp +199 -74
- data/source/bzs/db/engine/mysql/database.h +47 -18
- data/source/bzs/db/engine/mysql/dbManager.cpp +1 -0
- data/source/bzs/db/engine/mysql/mysqlInternal.h +32 -8
- data/source/bzs/db/protocol/tdap/btrDate.cpp +110 -75
- data/source/bzs/db/protocol/tdap/btrDate.h +46 -21
- data/source/bzs/db/protocol/tdap/client/activeTable.cpp +18 -18
- data/source/bzs/db/protocol/tdap/client/activeTable.h +25 -25
- data/source/bzs/db/protocol/tdap/client/activeTableImple.h +10 -4
- data/source/bzs/db/protocol/tdap/client/client.cpp +6 -5
- data/source/bzs/db/protocol/tdap/client/client.h +82 -15
- data/source/bzs/db/protocol/tdap/client/database.cpp +531 -142
- data/source/bzs/db/protocol/tdap/client/database.h +19 -6
- data/source/bzs/db/protocol/tdap/client/dbDef.cpp +461 -408
- data/source/bzs/db/protocol/tdap/client/dbDef.h +11 -17
- data/source/bzs/db/protocol/tdap/client/dllmain.cpp +61 -13
- data/source/bzs/db/protocol/tdap/client/field.cpp +1592 -1398
- data/source/bzs/db/protocol/tdap/client/field.h +110 -121
- data/source/bzs/db/protocol/tdap/client/fields.h +40 -10
- data/source/bzs/db/protocol/tdap/client/filter.h +69 -55
- data/source/bzs/db/protocol/tdap/client/groupQuery.cpp +296 -164
- data/source/bzs/db/protocol/tdap/client/groupQuery.h +77 -25
- data/source/bzs/db/protocol/tdap/client/memRecord.cpp +31 -13
- data/source/bzs/db/protocol/tdap/client/memRecord.h +31 -21
- data/source/bzs/db/protocol/tdap/client/nsDatabase.cpp +1 -1
- data/source/bzs/db/protocol/tdap/client/nsDatabase.h +4 -1
- data/source/bzs/db/protocol/tdap/client/nsTable.cpp +69 -24
- data/source/bzs/db/protocol/tdap/client/nsTable.h +3 -1
- data/source/bzs/db/protocol/tdap/client/recordset.cpp +1 -0
- data/source/bzs/db/protocol/tdap/client/recordsetImple.h +46 -27
- data/source/bzs/db/protocol/tdap/client/request.h +2 -1
- data/source/bzs/db/protocol/tdap/client/serializer.cpp +44 -9
- data/source/bzs/db/protocol/tdap/client/serializer.h +1 -1
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.cpp +182 -76
- data/source/bzs/db/protocol/tdap/client/sqlBuilder.h +23 -12
- data/source/bzs/db/protocol/tdap/client/stringConverter.h +8 -10
- data/source/bzs/db/protocol/tdap/client/table.cpp +172 -93
- data/source/bzs/db/protocol/tdap/client/table.h +112 -37
- data/source/bzs/db/protocol/tdap/client/trdboostapi.h +17 -0
- data/source/bzs/db/protocol/tdap/client/trdboostapiInternal.h +0 -1
- data/source/bzs/db/protocol/tdap/client/trdclcppautolink.h +0 -2
- data/source/bzs/db/protocol/tdap/client/trdormapi.h +1 -1
- data/source/bzs/db/protocol/tdap/fieldComp.h +698 -14
- data/source/bzs/db/protocol/tdap/myDateTime.cpp +723 -307
- data/source/bzs/db/protocol/tdap/myDateTime.h +294 -0
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.cpp +164 -54
- data/source/bzs/db/protocol/tdap/mysql/databaseSchema.h +6 -3
- data/source/bzs/db/protocol/tdap/mysql/recordsetReader.h +133 -550
- data/source/bzs/db/protocol/tdap/mysql/request.h +6 -5
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.cpp +217 -82
- data/source/bzs/db/protocol/tdap/mysql/tdapCommandExecuter.h +1 -1
- data/source/bzs/db/protocol/tdap/tdapRequest.h +4 -9
- data/source/bzs/db/protocol/tdap/tdapSchema.cpp +808 -17
- data/source/bzs/db/protocol/tdap/tdapSchema.h +656 -164
- data/source/bzs/db/protocol/tdap/tdapcapi.h +130 -28
- data/source/bzs/db/protocol/tdap/uri.h +40 -32
- data/source/bzs/db/transactd/connManager.cpp +1 -1
- data/source/bzs/db/transactd/transactd.cpp +7 -0
- data/source/bzs/env/compiler.h +107 -94
- data/source/bzs/env/crosscompile.cpp +24 -12
- data/source/bzs/env/crosscompile.h +75 -6
- data/source/bzs/env/mbcswchrLinux.cpp +2 -2
- data/source/bzs/env/tcharMinGW.h +4 -0
- data/source/bzs/example/changeSchema.cpp +22 -17
- data/source/bzs/example/queryData.cpp +4 -0
- data/source/bzs/netsvc/client/iconnection.h +3 -1
- data/source/bzs/netsvc/client/tcpClient.h +10 -3
- data/source/bzs/rtl/stringBuffers.cpp +7 -0
- data/source/bzs/test/tdclatl/bench_query_atl.js +6 -0
- data/source/bzs/test/tdclatl/bench_tdclatl.js +8 -1
- data/source/bzs/test/tdclatl/test_query_atl.js +22 -2
- data/source/bzs/test/tdclatl/test_v3.js +1017 -0
- data/source/bzs/test/tdclphp/transactd_Test.php +55 -21
- data/source/bzs/test/tdclphp/transactd_datetime_Test.php +0 -5
- data/source/bzs/test/tdclphp/transactd_pool_Test.php +2 -0
- data/source/bzs/test/tdclphp/transactd_v3_Test.php +743 -0
- data/source/bzs/test/tdclrb/transactd_datetime_spec.rb +0 -5
- data/source/bzs/test/tdclrb/transactd_pool_spec.rb +2 -0
- data/source/bzs/test/tdclrb/transactd_spec.rb +39 -16
- data/source/bzs/test/tdclrb/transactd_v3_spec.rb +748 -0
- data/source/bzs/test/transactdBench/transactdBench.cpp +55 -58
- data/source/bzs/test/transactdBench/transactdBench2.cpp +1 -3
- data/source/bzs/test/trdclengn/testField.h +3305 -0
- data/source/bzs/test/trdclengn/test_tdclcpp_v3.cpp +1050 -0
- data/source/bzs/test/trdclengn/test_trdclengn.cpp +112 -190
- data/source/bzs/test/trdclengn/testbase.h +137 -0
- data/source/global/ormsrcgen/srcgen.cpp +23 -12
- data/source/global/ormsrcgen/template/ormDataClass_template.h +2 -0
- data/source/global/querystmts/querystmts.cpp +2 -3
- data/source/global/tdclatl/Bitset.cpp +38 -0
- data/source/global/tdclatl/Bitset.h +63 -0
- data/source/global/tdclatl/Database.cpp +59 -18
- data/source/global/tdclatl/Database.h +7 -4
- data/source/global/tdclatl/DbDef.cpp +6 -6
- data/source/global/tdclatl/DbDef.h +2 -1
- data/source/global/tdclatl/Field.cpp +112 -0
- data/source/global/tdclatl/Field.h +19 -5
- data/source/global/tdclatl/FieldDef.cpp +137 -16
- data/source/global/tdclatl/FieldDef.h +18 -2
- data/source/global/tdclatl/FieldDefs.cpp +54 -1
- data/source/global/tdclatl/FieldDefs.h +3 -0
- data/source/global/tdclatl/GroupQuery.cpp +8 -8
- data/source/global/tdclatl/QueryBase.cpp +65 -0
- data/source/global/tdclatl/QueryBase.h +10 -0
- data/source/global/tdclatl/Record.cpp +33 -2
- data/source/global/tdclatl/Record.h +3 -1
- data/source/global/tdclatl/RecordsetQuery.cpp +42 -0
- data/source/global/tdclatl/RecordsetQuery.h +8 -0
- data/source/global/tdclatl/Table.cpp +127 -3
- data/source/global/tdclatl/Table.h +10 -1
- data/source/global/tdclatl/TableDef.cpp +41 -8
- data/source/global/tdclatl/TableDef.h +7 -2
- data/source/global/tdclatl/activeTable.cpp +40 -71
- data/source/global/tdclatl/resource.h +0 -0
- data/source/global/tdclatl/tdclatl.idl +222 -28
- data/source/linux/tchar.h +100 -96
- data/transactd.gemspec +2 -2
- metadata +13 -11
- data/BUILD_UNIX-JA.md +0 -161
- data/BUILD_WIN-JA.md +0 -326
- data/README_ORMSRCGEN-JA.md +0 -115
- data/README_ORMSRCGEN.md +0 -118
- data/RELEASE_NOTE-JA.md +0 -356
- data/RELEASE_NOTE.md +0 -360
- data/bin/common/tdclc_32_2_4.dll +0 -0
- data/bin/common/tdclc_64_2_4.dll +0 -0
- data/source/bzs/test/trdclengn/test_blob.cpp +0 -375
|
@@ -16,11 +16,14 @@
|
|
|
16
16
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
|
17
17
|
02111-1307, USA.
|
|
18
18
|
=================================================================*/
|
|
19
|
-
#include
|
|
19
|
+
#include "myDateTime.h"
|
|
20
|
+
#include <bzs/db/protocol/tdap/btrDate.h>
|
|
21
|
+
#include <string.h>
|
|
20
22
|
#include <stdlib.h>
|
|
21
23
|
#include <stdio.h>
|
|
22
24
|
#include <time.h>
|
|
23
|
-
#include <
|
|
25
|
+
#include <algorithm>
|
|
26
|
+
#include <bzs/env/crosscompile.h>
|
|
24
27
|
|
|
25
28
|
namespace bzs
|
|
26
29
|
{
|
|
@@ -30,166 +33,118 @@ namespace protocol
|
|
|
30
33
|
{
|
|
31
34
|
namespace tdap
|
|
32
35
|
{
|
|
33
|
-
|
|
34
|
-
#pragma pack(push, 1)
|
|
35
|
-
pragma_pack1;
|
|
36
|
-
|
|
36
|
+
#pragma warning(disable : 4996)
|
|
37
37
|
#ifdef _WIN32
|
|
38
|
-
|
|
39
|
-
const wchar_t wtime_format_ms[] = L"%02d:%02d:%02d.%u";
|
|
38
|
+
const wchar_t wtime_format_ms[] = L"%02d:%02d:%02d.%0*u";
|
|
40
39
|
const wchar_t wtime_format[] = L"%02d:%02d:%02d";
|
|
41
|
-
const wchar_t wdatetime_format_ms[] = L"%04d-%02d-%02d %02d:%02d:%02d.%u";
|
|
40
|
+
const wchar_t wdatetime_format_ms[] = L"%04d-%02d-%02d %02d:%02d:%02d.%0*u";
|
|
42
41
|
const wchar_t wdatetime_format[] = L"%04d-%02d-%02d %02d:%02d:%02d";
|
|
43
|
-
const wchar_t wdatetime_format_ms_i[] = L"%04d-%02d-%02d %02d:%02d:%02d.%u";
|
|
44
|
-
const wchar_t wdatetime_format_i[] = L"%04d-%02d-%02d %02d:%02d:%02d";
|
|
45
|
-
|
|
46
|
-
inline size_t _ttol_(const wchar_t* v)
|
|
47
|
-
{
|
|
48
|
-
return _wtol(v);
|
|
49
|
-
}
|
|
50
|
-
inline size_t _tcslen_(const wchar_t* v)
|
|
51
|
-
{
|
|
52
|
-
return wcslen(v);
|
|
53
|
-
}
|
|
54
|
-
inline wchar_t* _tcsncpy_(wchar_t* d, const wchar_t* s, size_t n)
|
|
55
|
-
{
|
|
56
|
-
return wcsncpy(d, s, n);
|
|
57
|
-
}
|
|
58
|
-
|
|
59
42
|
#endif
|
|
60
|
-
|
|
61
|
-
const char time_format_ms[] = "%02d:%02d:%02d.%u";
|
|
43
|
+
const char time_format_ms[] = "%02d:%02d:%02d.%0*u";
|
|
62
44
|
const char time_format[] = "%02d:%02d:%02d";
|
|
63
|
-
const char datetime_format_ms[] =
|
|
64
|
-
const char datetime_format[] =
|
|
65
|
-
const char datetime_format_ms_i[] = "%04d-%02d-%02d %02d:%02d:%02d.%u";
|
|
66
|
-
const char datetime_format_i[] = "%04d-%02d-%02d %02d:%02d:%02d";
|
|
45
|
+
const char datetime_format_ms[] = "%04d-%02d-%02d %02d:%02d:%02d.%0*u";
|
|
46
|
+
const char datetime_format[] = "%04d-%02d-%02d %02d:%02d:%02d";
|
|
67
47
|
|
|
68
|
-
|
|
48
|
+
//-------------------------------------------------------------
|
|
49
|
+
void myDate::setValue(int v, bool btrDate_i)
|
|
69
50
|
{
|
|
70
|
-
|
|
51
|
+
if (btrDate_i)
|
|
52
|
+
{
|
|
53
|
+
btrDate btrd;
|
|
54
|
+
btrd.i = v;
|
|
55
|
+
yy = btrd.yy;
|
|
56
|
+
mm = btrd.mm;
|
|
57
|
+
dd = btrd.dd;
|
|
58
|
+
tmp = 0;
|
|
59
|
+
}
|
|
60
|
+
else
|
|
61
|
+
i = v;
|
|
71
62
|
}
|
|
72
|
-
|
|
63
|
+
|
|
64
|
+
int myDate::getValue(bool btrDate_i)
|
|
73
65
|
{
|
|
74
|
-
|
|
66
|
+
if (btrDate_i)
|
|
67
|
+
{
|
|
68
|
+
btrDate btrd;
|
|
69
|
+
btrd.yy = yy;
|
|
70
|
+
btrd.mm = mm;
|
|
71
|
+
btrd.dd = dd;
|
|
72
|
+
return btrd.i;
|
|
73
|
+
}
|
|
74
|
+
return i;
|
|
75
75
|
}
|
|
76
|
-
|
|
76
|
+
|
|
77
|
+
char* myDate::toString(char* p, size_t size, bool w3_format)
|
|
77
78
|
{
|
|
78
|
-
|
|
79
|
+
if (w3_format)
|
|
80
|
+
sprintf_s(p, size, "%04d/%02d/%02d", yy, mm, dd);
|
|
81
|
+
else
|
|
82
|
+
sprintf_s(p, size, "%04d-%02d-%02d", yy, mm, dd);
|
|
83
|
+
return p;
|
|
79
84
|
}
|
|
80
85
|
|
|
81
|
-
|
|
82
|
-
union myDate
|
|
86
|
+
myDate& myDate::operator=(const char* p)
|
|
83
87
|
{
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
unsigned int mm : 4;
|
|
88
|
-
unsigned int yy : 15;
|
|
89
|
-
unsigned int tmp : 8;
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
int i;
|
|
93
|
-
|
|
94
|
-
inline void setValue(int v, bool btrvValue = false)
|
|
88
|
+
size_t len = strlen(p);
|
|
89
|
+
i = 0;
|
|
90
|
+
if (len > 3)
|
|
95
91
|
{
|
|
96
|
-
|
|
92
|
+
yy = atol(p);
|
|
93
|
+
if (len > 6)
|
|
97
94
|
{
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
mm = btrd.mm;
|
|
102
|
-
dd = btrd.dd;
|
|
103
|
-
tmp = 0;
|
|
95
|
+
mm = atol(p + 5);
|
|
96
|
+
if (len > 9)
|
|
97
|
+
dd = atol(p + 8);
|
|
104
98
|
}
|
|
105
|
-
else
|
|
106
|
-
i = v;
|
|
107
99
|
}
|
|
100
|
+
return *this;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
#ifdef _WIN32
|
|
104
|
+
wchar_t* myDate::toString(wchar_t* p, size_t size, bool w3_format)
|
|
105
|
+
{
|
|
106
|
+
if (w3_format)
|
|
107
|
+
swprintf_s(p, size, L"%04d/%02d/%02d", yy, mm, dd);
|
|
108
|
+
else
|
|
109
|
+
swprintf_s(p, size, L"%04d-%02d-%02d", yy, mm, dd);
|
|
110
|
+
return p;
|
|
111
|
+
}
|
|
108
112
|
|
|
109
|
-
|
|
113
|
+
myDate& myDate::operator=(const wchar_t* p)
|
|
114
|
+
{
|
|
115
|
+
size_t len = wcslen(p);
|
|
116
|
+
i = 0;
|
|
117
|
+
if (len > 3)
|
|
110
118
|
{
|
|
111
|
-
|
|
119
|
+
yy = _wtol(p);
|
|
120
|
+
if (len > 6)
|
|
112
121
|
{
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
btrd.dd = dd;
|
|
117
|
-
return btrd.i;
|
|
122
|
+
mm = _wtol(p + 5);
|
|
123
|
+
if (len > 9)
|
|
124
|
+
dd = _wtol(p + 8);
|
|
118
125
|
}
|
|
119
|
-
return i;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
inline char* toStr(char* p, bool btrvValue)
|
|
123
|
-
{
|
|
124
|
-
if (btrvValue)
|
|
125
|
-
sprintf(p, "%04d/%02d/%02d", yy, mm, dd);
|
|
126
|
-
else
|
|
127
|
-
sprintf(p, "%04d-%02d-%02d", yy, mm, dd);
|
|
128
|
-
return p;
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
#ifdef _WIN32
|
|
132
|
-
inline wchar_t* toStr(wchar_t* p, bool btrvValue)
|
|
133
|
-
{
|
|
134
|
-
if (btrvValue)
|
|
135
|
-
swprintf_s(p, 11, L"%04d/%02d/%02d", yy, mm, dd);
|
|
136
|
-
else
|
|
137
|
-
swprintf_s(p, 11, L"%04d-%02d-%02d", yy, mm, dd);
|
|
138
|
-
return p;
|
|
139
126
|
}
|
|
127
|
+
return *this;
|
|
128
|
+
}
|
|
140
129
|
#endif
|
|
141
130
|
|
|
142
|
-
template <class T> inline myDate& operator=(const T* p)
|
|
143
|
-
{
|
|
144
|
-
tmp = 0;
|
|
145
|
-
yy = _ttol_(p);
|
|
146
|
-
mm = _ttol_(p + 5);
|
|
147
|
-
dd = _ttol_(p + 8);
|
|
148
|
-
return *this;
|
|
149
|
-
}
|
|
150
|
-
};
|
|
151
131
|
|
|
152
|
-
|
|
132
|
+
//-------------------------------------------------------------
|
|
133
|
+
void myTime::setValue(__int64 v, bool btrTime_i)
|
|
153
134
|
{
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
int m_dec;
|
|
157
|
-
|
|
158
|
-
public:
|
|
159
|
-
union
|
|
135
|
+
i64 = 0;
|
|
136
|
+
if (btrTime_i)
|
|
160
137
|
{
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
};
|
|
171
|
-
__int64 i64;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
public:
|
|
175
|
-
inline myTime(int size) : m_dec((size - 3) * 2){};
|
|
176
|
-
|
|
177
|
-
inline void setValue(__int64 v, bool btrvValue = false)
|
|
138
|
+
btrTime btrt;
|
|
139
|
+
btrt.i = (int)v;
|
|
140
|
+
hh = btrt.hh;
|
|
141
|
+
nn = btrt.nn;
|
|
142
|
+
ss = btrt.ss;
|
|
143
|
+
ms = btrt.uu * 10000;
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
if (m_bigendian)
|
|
178
147
|
{
|
|
179
|
-
|
|
180
|
-
if (btrvValue)
|
|
181
|
-
{
|
|
182
|
-
btrTime btrt;
|
|
183
|
-
btrt.i = (int)v;
|
|
184
|
-
hh = btrt.hh;
|
|
185
|
-
nn = btrt.nn;
|
|
186
|
-
ss = btrt.ss;
|
|
187
|
-
ms = btrt.uu * 10000;
|
|
188
|
-
tmp = 0;
|
|
189
|
-
sign = 1;
|
|
190
|
-
unused = 0;
|
|
191
|
-
return;
|
|
192
|
-
}
|
|
193
148
|
char* p = (char*)&i64;
|
|
194
149
|
char* src = (char*)&v;
|
|
195
150
|
if (m_dec)
|
|
@@ -197,16 +152,37 @@ public:
|
|
|
197
152
|
p[0] = src[5];
|
|
198
153
|
p[1] = src[4];
|
|
199
154
|
p[2] = src[3];
|
|
200
|
-
ms = ms >> (3 - m_dec / 2) * 8;
|
|
155
|
+
ms = ms >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
156
|
+
ms /= ((m_dec % 2) ? 10 : 1);
|
|
201
157
|
}
|
|
202
158
|
p[3] = src[2];
|
|
203
159
|
p[4] = src[1];
|
|
204
160
|
p[5] = src[0];
|
|
161
|
+
sign = 0;
|
|
162
|
+
}else
|
|
163
|
+
{//DD�~24�~3600 + HH�~3600 + MM�~60 + SS
|
|
164
|
+
hh = v / 10000;
|
|
165
|
+
nn = (v % 10000) / 100;
|
|
166
|
+
ss = v % 100;
|
|
205
167
|
}
|
|
168
|
+
}
|
|
206
169
|
|
|
207
|
-
|
|
170
|
+
__int64 myTime::getValue(bool btrTime_i)
|
|
171
|
+
{
|
|
172
|
+
if (btrTime_i)
|
|
173
|
+
{
|
|
174
|
+
btrTime btrt;
|
|
175
|
+
btrt.hh = hh;
|
|
176
|
+
btrt.nn = nn;
|
|
177
|
+
btrt.ss = ss;
|
|
178
|
+
btrt.uu = (char)(ms / 100000);
|
|
179
|
+
return btrt.i;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
__int64 v = 0;
|
|
183
|
+
sign = 1;
|
|
184
|
+
if (m_bigendian)
|
|
208
185
|
{
|
|
209
|
-
__int64 v = 0;
|
|
210
186
|
char* src = (char*)&i64;
|
|
211
187
|
char* p = (char*)&v;
|
|
212
188
|
p[2] = src[3];
|
|
@@ -214,107 +190,194 @@ public:
|
|
|
214
190
|
p[0] = src[5];
|
|
215
191
|
if (m_dec)
|
|
216
192
|
{
|
|
217
|
-
ms = ms << (3 - m_dec / 2) * 8;
|
|
193
|
+
ms = ms << (3 - ((m_dec + 1) / 2)) * 8;
|
|
194
|
+
ms *= ((m_dec % 2) ? 10 : 1);
|
|
218
195
|
p[3] = src[2];
|
|
219
196
|
p[4] = src[1];
|
|
220
197
|
p[5] = src[0];
|
|
221
198
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
btrt.ss = ss;
|
|
228
|
-
btrt.uu = (char)(ms / 100000);
|
|
229
|
-
return btrt.i;
|
|
230
|
-
}
|
|
231
|
-
return v;
|
|
232
|
-
}
|
|
199
|
+
}else
|
|
200
|
+
v = (hh * 10000LL) + (nn * 100LL) + ss;
|
|
201
|
+
sign = 0;
|
|
202
|
+
return v;
|
|
203
|
+
}
|
|
233
204
|
|
|
234
|
-
|
|
205
|
+
char* myTime::toString(char* p, size_t size)
|
|
206
|
+
{
|
|
207
|
+
if (m_dec)
|
|
208
|
+
sprintf_s(p, size, time_format_ms, (int)hh, (int)nn, (int)ss,
|
|
209
|
+
m_dec, (unsigned int)ms);
|
|
210
|
+
else
|
|
211
|
+
sprintf_s(p, size, time_format, (int)hh, (int)nn, (int)ss);
|
|
212
|
+
return p;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
myTime& myTime::operator=(const char* p)
|
|
216
|
+
{
|
|
217
|
+
i64 = 0;
|
|
218
|
+
size_t len = strlen(p);
|
|
219
|
+
if (len > 1)
|
|
235
220
|
{
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
221
|
+
hh = atol(p);
|
|
222
|
+
if (len > 4)
|
|
223
|
+
{
|
|
224
|
+
nn = atol(p + 3);
|
|
225
|
+
if (len > 7)
|
|
226
|
+
{
|
|
227
|
+
ss = atol(p + 6);
|
|
228
|
+
if (m_dec && len > 9)
|
|
229
|
+
{
|
|
230
|
+
char tmp[10] = { 0x00 };
|
|
231
|
+
strncpy(tmp, p + 9, (size_t)m_dec);
|
|
232
|
+
ms = atol(tmp);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
242
236
|
}
|
|
237
|
+
return *this;
|
|
238
|
+
}
|
|
243
239
|
|
|
244
240
|
#ifdef _WIN32
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
#endif
|
|
241
|
+
wchar_t* myTime::toString(wchar_t* p, size_t size)
|
|
242
|
+
{
|
|
243
|
+
if (m_dec)
|
|
244
|
+
swprintf_s(p, size, wtime_format_ms, (int)hh, (int)nn, (int)ss,
|
|
245
|
+
m_dec, (unsigned int)ms);
|
|
246
|
+
else
|
|
247
|
+
swprintf_s(p, size, wtime_format, (int)hh, (int)nn, (int)ss);
|
|
248
|
+
return p;
|
|
249
|
+
}
|
|
255
250
|
|
|
256
|
-
|
|
251
|
+
myTime& myTime::operator=(const wchar_t* p)
|
|
252
|
+
{
|
|
253
|
+
i64 = 0;
|
|
254
|
+
size_t len = wcslen(p);
|
|
255
|
+
if (len > 1)
|
|
257
256
|
{
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
ms = 0;
|
|
261
|
-
hh = _ttol_(p);
|
|
262
|
-
nn = _ttol_(p + 3);
|
|
263
|
-
ss = _ttol_(p + 6);
|
|
264
|
-
if (m_dec && _tcslen_(p) > 9)
|
|
257
|
+
hh = _wtol(p);
|
|
258
|
+
if (len > 4)
|
|
265
259
|
{
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
260
|
+
nn = _wtol(p + 3);
|
|
261
|
+
if (len > 7)
|
|
262
|
+
{
|
|
263
|
+
ss = _wtol(p + 6);
|
|
264
|
+
if (m_dec && len > 9)
|
|
265
|
+
{
|
|
266
|
+
wchar_t tmp[10] = { 0x00 };
|
|
267
|
+
wcsncpy(tmp, p + 9, (size_t)m_dec);
|
|
268
|
+
ms = _wtol(tmp);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
269
271
|
}
|
|
270
|
-
return *this;
|
|
271
272
|
}
|
|
272
|
-
|
|
273
|
+
return *this;
|
|
274
|
+
}
|
|
275
|
+
#endif
|
|
276
|
+
//-------------------------------------------------------------
|
|
277
|
+
static int digit_logs[7] = {1, 10, 100, 1000, 10000, 100000, 1000000}; // digit 0 to 6
|
|
278
|
+
#define ZEROPOINT_SEC 3020400ULL
|
|
273
279
|
|
|
274
|
-
|
|
280
|
+
void maTime::setValue(__int64 v, bool btrTime_i)
|
|
275
281
|
{
|
|
276
|
-
|
|
277
|
-
int m_dec;
|
|
278
|
-
|
|
279
|
-
public:
|
|
280
|
-
union
|
|
282
|
+
if (m_bigendian && !btrTime_i)
|
|
281
283
|
{
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
__int64 i64;
|
|
293
|
-
|
|
284
|
+
i64 = 0;
|
|
285
|
+
char* p = (char*)&i64;
|
|
286
|
+
char* src = (char*)&v;
|
|
287
|
+
p[0] = src[5];
|
|
288
|
+
p[1] = src[4];
|
|
289
|
+
p[2] = src[3];
|
|
290
|
+
p[3] = src[2];
|
|
291
|
+
p[4] = src[1];
|
|
292
|
+
p[5] = src[0];
|
|
293
|
+
i64 = i64 >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
294
|
+
__int64 v = i64;
|
|
295
|
+
if (v)
|
|
296
|
+
v -= (ZEROPOINT_SEC * digit_logs[m_dec]);
|
|
297
|
+
ms = v % digit_logs[m_dec]; v /= digit_logs[m_dec];
|
|
298
|
+
ss = v % 60; v /= 60;
|
|
299
|
+
nn = v % 60; v /= 60;
|
|
300
|
+
hh = v % 24;
|
|
301
|
+
sign = 0;
|
|
302
|
+
}else
|
|
303
|
+
myTime::setValue(v, btrTime_i);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
__int64 maTime::getValue(bool btrTime_i)
|
|
307
|
+
{
|
|
308
|
+
if (!m_bigendian || btrTime_i) return myTime::getValue(btrTime_i);
|
|
309
|
+
unsigned __int64 i64t = (((hh) * 60ULL + nn) * 60ULL + ss) * digit_logs[m_dec] + ms;
|
|
310
|
+
if (i64t)
|
|
311
|
+
i64t += ZEROPOINT_SEC * digit_logs[m_dec];
|
|
312
|
+
|
|
313
|
+
__int64 v = 0;
|
|
314
|
+
char* src = (char*)&i64t;
|
|
315
|
+
char* p = (char*)&v;
|
|
316
|
+
p[2] = src[3];
|
|
317
|
+
p[1] = src[4];
|
|
318
|
+
p[0] = src[5];
|
|
319
|
+
p[3] = src[2];
|
|
320
|
+
p[4] = src[1];
|
|
321
|
+
p[5] = src[0];
|
|
322
|
+
v = v >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
323
|
+
return v;
|
|
324
|
+
}
|
|
294
325
|
|
|
295
|
-
|
|
326
|
+
maTime& maTime::operator=(const char* p)
|
|
327
|
+
{
|
|
328
|
+
myTime::operator=(p);
|
|
329
|
+
return *this;
|
|
330
|
+
}
|
|
296
331
|
|
|
297
|
-
|
|
332
|
+
#ifdef _WIN32
|
|
333
|
+
maTime& maTime::operator=(const wchar_t* p)
|
|
334
|
+
{
|
|
335
|
+
myTime::operator=(p);
|
|
336
|
+
return *this;
|
|
337
|
+
}
|
|
338
|
+
#endif
|
|
339
|
+
//-------------------------------------------------------------
|
|
340
|
+
void myDateTime::setValue(__int64 v)
|
|
341
|
+
{
|
|
342
|
+
i64 = 0;
|
|
343
|
+
if (m_bigendian)
|
|
298
344
|
{
|
|
299
345
|
char* p = (char*)&i64;
|
|
300
346
|
char* src = (char*)&v;
|
|
301
|
-
|
|
302
|
-
{
|
|
303
|
-
p[0] = src[7];
|
|
304
|
-
p[1] = src[6];
|
|
305
|
-
p[2] = src[5];
|
|
306
|
-
ms = ms >> (3 - m_dec / 2) * 8;
|
|
307
|
-
}
|
|
347
|
+
|
|
308
348
|
p[3] = src[4];
|
|
309
349
|
p[4] = src[3];
|
|
310
350
|
p[5] = src[2];
|
|
311
351
|
p[6] = src[1];
|
|
312
352
|
p[7] = src[0];
|
|
353
|
+
if (i64 && m_dec)
|
|
354
|
+
{
|
|
355
|
+
p[0] = src[7];
|
|
356
|
+
p[1] = src[6];
|
|
357
|
+
p[2] = src[5];
|
|
358
|
+
ms = ms >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
359
|
+
ms /= ((m_dec % 2) ? 10 : 1);
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
}else
|
|
363
|
+
{ // YYYY�~10000 + MM�~100 + DD HH�~10000 + MM�~100 + SS
|
|
364
|
+
__int64 yy = v / 10000000000LL;
|
|
365
|
+
__int64 m = (v / 100000000LL) % 100;
|
|
366
|
+
yymm = yy*13 + m;
|
|
367
|
+
dd = (v / 1000000L) % 100;
|
|
368
|
+
hh = (v / 10000L) % 100;
|
|
369
|
+
nn = (v / 100L) % 100;
|
|
370
|
+
ss = v % 100;
|
|
313
371
|
}
|
|
372
|
+
sign = 0;
|
|
373
|
+
}
|
|
314
374
|
|
|
315
|
-
|
|
375
|
+
__int64 myDateTime::getValue()
|
|
376
|
+
{
|
|
377
|
+
__int64 v = 0;
|
|
378
|
+
sign = 1;
|
|
379
|
+
if (m_bigendian)
|
|
316
380
|
{
|
|
317
|
-
__int64 v = 0;
|
|
318
381
|
char* src = (char*)&i64;
|
|
319
382
|
char* p = (char*)&v;
|
|
320
383
|
p[4] = src[3];
|
|
@@ -322,97 +385,301 @@ public:
|
|
|
322
385
|
p[2] = src[5];
|
|
323
386
|
p[1] = src[6];
|
|
324
387
|
p[0] = src[7];
|
|
325
|
-
if (m_dec)
|
|
388
|
+
if (v && m_dec)
|
|
326
389
|
{
|
|
327
|
-
ms = ms << (3 - m_dec / 2) * 8;
|
|
390
|
+
ms = ms << (3 - ((m_dec + 1) / 2)) * 8;
|
|
391
|
+
ms *= ((m_dec % 2) ? 10 : 1);
|
|
328
392
|
p[5] = src[2];
|
|
329
393
|
p[6] = src[1];
|
|
330
394
|
p[7] = src[0];
|
|
331
395
|
}
|
|
332
|
-
|
|
396
|
+
|
|
397
|
+
}else
|
|
398
|
+
{ // YYYY�~10000 + MM�~100 + DD HH�~10000 + MM�~100 + SS
|
|
399
|
+
__int64 yy = yymm / 13;
|
|
400
|
+
__int64 m = yymm % 13;
|
|
401
|
+
v = (yy * 10000000000) + (m * 100000000LL) + (dd * 1000000LL) +
|
|
402
|
+
(hh * 10000LL) + (nn * 100LL) + ss;
|
|
333
403
|
}
|
|
404
|
+
sign = 0;
|
|
405
|
+
return v;
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
myDateTime& myDateTime::operator=(const char* p)
|
|
409
|
+
{
|
|
410
|
+
size_t len = strlen(p);
|
|
411
|
+
i64 = 0;
|
|
334
412
|
|
|
335
|
-
|
|
413
|
+
if (len > 6)
|
|
336
414
|
{
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
415
|
+
yymm = atol(p) * 13 + atol(p + 5);
|
|
416
|
+
if (len > 9)
|
|
417
|
+
{
|
|
418
|
+
dd = atol(p + 8);
|
|
419
|
+
if (len > 12)
|
|
420
|
+
{
|
|
421
|
+
hh = atol(p + 11);
|
|
422
|
+
if (len > 15)
|
|
423
|
+
{
|
|
424
|
+
nn = atol(p + 14);
|
|
425
|
+
if (len > 18)
|
|
426
|
+
{
|
|
427
|
+
ss = atol(p + 17);
|
|
428
|
+
if (m_dec && len > 20)
|
|
429
|
+
{
|
|
430
|
+
char tmp[10] = { 0x00 };
|
|
431
|
+
strncpy(tmp, p + 20, (size_t)m_dec);
|
|
432
|
+
ms = atol(tmp);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
return *this;
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
|
|
443
|
+
void myDateTime::setTime(const char* p)
|
|
444
|
+
{
|
|
445
|
+
i64 = 0;
|
|
446
|
+
size_t len = strlen(p);
|
|
447
|
+
if (len > 1)
|
|
448
|
+
{
|
|
449
|
+
hh = atol(p);
|
|
450
|
+
if (len > 4)
|
|
451
|
+
{
|
|
452
|
+
nn = atol(p + 3);
|
|
453
|
+
if (len > 7)
|
|
454
|
+
{
|
|
455
|
+
ss = atol(p + 6);
|
|
456
|
+
if (m_dec && len > 9)
|
|
457
|
+
{
|
|
458
|
+
char tmp[10] = { 0x00 };
|
|
459
|
+
strncpy(tmp, p + 9, (size_t)m_dec);
|
|
460
|
+
ms = atol(tmp);
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
}
|
|
464
|
+
}
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
char* myDateTime::dateStr(char* p, size_t size) const
|
|
469
|
+
{
|
|
470
|
+
sprintf_s(p, size, "%04d-%02d-%02d", (int)(yymm / 13),
|
|
471
|
+
(int)(yymm % 13), (int)dd);
|
|
472
|
+
return p;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
char* myDateTime::timeStr(char* p, size_t size) const
|
|
476
|
+
{
|
|
477
|
+
if (m_dec)
|
|
478
|
+
sprintf_s(p, size, time_format_ms, (int)hh, (int)nn, (int)ss,
|
|
479
|
+
m_dec, (unsigned int)ms);
|
|
480
|
+
else
|
|
481
|
+
sprintf_s(p, size, time_format, (int)hh, (int)nn, (int)ss);
|
|
482
|
+
return p;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
char* myDateTime::toString(char* p, size_t size) const
|
|
486
|
+
{
|
|
487
|
+
if (m_dec)
|
|
488
|
+
{
|
|
489
|
+
sprintf_s(p, size, datetime_format_ms, (int)(yymm / 13), (int)(yymm % 13),
|
|
490
|
+
(int)dd, (int)hh, (int)nn, (int)ss, m_dec, (unsigned int)ms);
|
|
344
491
|
}
|
|
492
|
+
else
|
|
493
|
+
sprintf_s(p, size, datetime_format, (int)(yymm / 13), (int)(yymm % 13),
|
|
494
|
+
(int)dd, (int)hh, (int)nn, (int)ss);
|
|
495
|
+
return p;
|
|
496
|
+
}
|
|
497
|
+
|
|
345
498
|
|
|
346
499
|
#ifdef _WIN32
|
|
347
|
-
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
myDateTime& myDateTime::operator=(const wchar_t* p)
|
|
503
|
+
{
|
|
504
|
+
size_t len = wcslen(p);
|
|
505
|
+
i64 = 0;
|
|
506
|
+
|
|
507
|
+
if (len > 6)
|
|
348
508
|
{
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
509
|
+
yymm = _wtol(p) * 13 + _wtol(p + 5);
|
|
510
|
+
if (len > 9)
|
|
511
|
+
{
|
|
512
|
+
dd = _wtol(p + 8);
|
|
513
|
+
if (len > 12)
|
|
514
|
+
{
|
|
515
|
+
hh = _wtol(p + 11);
|
|
516
|
+
if (len > 15)
|
|
517
|
+
{
|
|
518
|
+
nn = _wtol(p + 14);
|
|
519
|
+
if (len > 18)
|
|
520
|
+
{
|
|
521
|
+
ss = _wtol(p + 17);
|
|
522
|
+
if (m_dec && len > 20)
|
|
523
|
+
{
|
|
524
|
+
wchar_t tmp[10] = { 0x00 };
|
|
525
|
+
wcsncpy(tmp, p + 20, (size_t)m_dec);
|
|
526
|
+
ms = _wtol(tmp);
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
357
532
|
}
|
|
358
|
-
|
|
533
|
+
return *this;
|
|
534
|
+
}
|
|
359
535
|
|
|
360
|
-
|
|
536
|
+
void myDateTime::setTime(const wchar_t* p)
|
|
537
|
+
{
|
|
538
|
+
i64 = 0;
|
|
539
|
+
size_t len = wcslen(p);
|
|
540
|
+
if (len > 1)
|
|
361
541
|
{
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
yymm = _ttol_(p) * 13 + _ttol_(p + 5);
|
|
365
|
-
dd = _ttol_(p + 8);
|
|
366
|
-
hh = _ttol_(p + 11);
|
|
367
|
-
nn = _ttol_(p + 14);
|
|
368
|
-
ss = _ttol_(p + 17);
|
|
369
|
-
if (m_dec && _tcslen_(p) > 20)
|
|
542
|
+
hh = _wtol(p);
|
|
543
|
+
if (len > 4)
|
|
370
544
|
{
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
545
|
+
nn = _wtol(p + 3);
|
|
546
|
+
if (len > 7)
|
|
547
|
+
{
|
|
548
|
+
ss = _wtol(p + 6);
|
|
549
|
+
if (m_dec && len > 9)
|
|
550
|
+
{
|
|
551
|
+
wchar_t tmp[10] = { 0x00 };
|
|
552
|
+
wcsncpy(tmp, p + 9, (size_t)m_dec);
|
|
553
|
+
ms = _wtol(tmp);
|
|
554
|
+
}
|
|
555
|
+
}
|
|
374
556
|
}
|
|
375
|
-
return *this;
|
|
376
557
|
}
|
|
377
|
-
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
wchar_t* myDateTime::dateStr(wchar_t* p, size_t size) const
|
|
561
|
+
{
|
|
562
|
+
swprintf_s(p, size, L"%04d-%02d-%02d", (int)(yymm / 13),
|
|
563
|
+
(int)(yymm % 13), (int)dd);
|
|
564
|
+
return p;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
wchar_t* myDateTime::timeStr(wchar_t* p, size_t size) const
|
|
568
|
+
{
|
|
569
|
+
if (m_dec)
|
|
570
|
+
swprintf_s(p, size, wtime_format_ms, (int)hh, (int)nn, (int)ss,
|
|
571
|
+
m_dec, (unsigned int)ms);
|
|
572
|
+
else
|
|
573
|
+
swprintf_s(p, size, wtime_format, (int)hh, (int)nn, (int)ss);
|
|
574
|
+
return p;
|
|
575
|
+
}
|
|
378
576
|
|
|
379
|
-
|
|
577
|
+
wchar_t* myDateTime::toString(wchar_t* p, size_t size) const
|
|
380
578
|
{
|
|
381
|
-
|
|
382
|
-
|
|
579
|
+
if (m_dec)
|
|
580
|
+
swprintf_s(p, size, wdatetime_format_ms, (int)(yymm / 13),
|
|
581
|
+
(int)(yymm % 13), (int)dd, (int)hh, (int)nn, (int)ss,
|
|
582
|
+
m_dec, (unsigned int)ms);
|
|
583
|
+
else
|
|
584
|
+
swprintf_s(p, size, wdatetime_format, (int)(yymm / 13),
|
|
585
|
+
(int)(yymm % 13), (int)dd, (int)hh, (int)nn, (int)ss);
|
|
586
|
+
return p;
|
|
587
|
+
}
|
|
383
588
|
|
|
384
|
-
|
|
385
|
-
|
|
589
|
+
#endif
|
|
590
|
+
//-------------------------------------------------------------
|
|
591
|
+
void maDateTime::setValue(__int64 v)
|
|
592
|
+
{
|
|
593
|
+
if (m_bigendian)
|
|
386
594
|
{
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
595
|
+
i64 = 0;
|
|
596
|
+
char* p = (char*)&i64;
|
|
597
|
+
char* src = (char*)&v;
|
|
598
|
+
p[3] = src[4];
|
|
599
|
+
p[4] = src[3];
|
|
600
|
+
p[5] = src[2];
|
|
601
|
+
p[6] = src[1];
|
|
602
|
+
p[7] = src[0];
|
|
603
|
+
p[0] = src[7];
|
|
604
|
+
p[1] = src[6];
|
|
605
|
+
p[2] = src[5];
|
|
606
|
+
i64 = i64 >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
607
|
+
__int64 v = i64;
|
|
608
|
+
ms = v % digit_logs[m_dec]; v /= digit_logs[m_dec];
|
|
609
|
+
ss = v % 60; v /= 60;
|
|
610
|
+
nn = v % 60; v /= 60;
|
|
611
|
+
hh = v % 24; v /= 24;
|
|
612
|
+
dd = v % 32; v /= 32;
|
|
613
|
+
__int64 mm = v % 13; v /= 13;
|
|
614
|
+
__int64 yy = v;
|
|
615
|
+
yymm = yy*13 + mm;
|
|
616
|
+
|
|
617
|
+
}else
|
|
618
|
+
myDateTime::setValue(v);
|
|
619
|
+
}
|
|
395
620
|
|
|
396
|
-
|
|
621
|
+
__int64 maDateTime::getValue()
|
|
622
|
+
{
|
|
623
|
+
if (!m_bigendian) return myDateTime::getValue();
|
|
624
|
+
unsigned __int64 i64t = (((((yymm) * 32ULL + dd) * 24ULL + hh) * 60ULL + nn) * 60ULL +
|
|
625
|
+
ss) * digit_logs[m_dec] + ms;
|
|
626
|
+
__int64 v;
|
|
627
|
+
char* src = (char*)&i64t;
|
|
628
|
+
char* p = (char*)&v;
|
|
629
|
+
p[4] = src[3];
|
|
630
|
+
p[3] = src[4];
|
|
631
|
+
p[2] = src[5];
|
|
632
|
+
p[1] = src[6];
|
|
633
|
+
p[0] = src[7];
|
|
634
|
+
p[5] = src[2];
|
|
635
|
+
p[6] = src[1];
|
|
636
|
+
p[7] = src[0];
|
|
637
|
+
v = v >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
638
|
+
return v;
|
|
639
|
+
}
|
|
640
|
+
|
|
641
|
+
maDateTime& maDateTime::operator=(const char* p)
|
|
642
|
+
{
|
|
643
|
+
myDateTime::operator=(p);
|
|
644
|
+
return *this;
|
|
645
|
+
}
|
|
397
646
|
|
|
398
|
-
|
|
647
|
+
#ifdef _WIN32
|
|
648
|
+
maDateTime& maDateTime::operator=(const wchar_t* p)
|
|
649
|
+
{
|
|
650
|
+
myDateTime::operator=(p);
|
|
651
|
+
return *this;
|
|
652
|
+
}
|
|
653
|
+
#endif
|
|
654
|
+
|
|
655
|
+
//-------------------------------------------------------------
|
|
656
|
+
void myTimeStamp::setValue(__int64 v)
|
|
657
|
+
{
|
|
658
|
+
i64 = 0;
|
|
659
|
+
if (m_bigendian)
|
|
399
660
|
{
|
|
400
661
|
char* p = (char*)&i64;
|
|
401
662
|
char* src = (char*)&v;
|
|
402
|
-
|
|
663
|
+
p[3] = src[3];
|
|
664
|
+
p[4] = src[2];
|
|
665
|
+
p[5] = src[1];
|
|
666
|
+
p[6] = src[0];
|
|
667
|
+
if (m_dec && datetime)
|
|
403
668
|
{
|
|
404
669
|
p[0] = src[6];
|
|
405
670
|
p[1] = src[5];
|
|
406
671
|
p[2] = src[4];
|
|
407
|
-
ms = ms >> (3 - m_dec / 2) * 8;
|
|
672
|
+
ms = ms >> (3 - ((m_dec + 1) / 2)) * 8;
|
|
673
|
+
if (!m_mariadb)
|
|
674
|
+
ms /= ((m_dec % 2) ? 10 : 1);
|
|
408
675
|
}
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
p[6] = src[0];
|
|
413
|
-
}
|
|
676
|
+
}else
|
|
677
|
+
datetime = v;
|
|
678
|
+
}
|
|
414
679
|
|
|
415
|
-
|
|
680
|
+
__int64 myTimeStamp::getValue()
|
|
681
|
+
{
|
|
682
|
+
if (m_bigendian)
|
|
416
683
|
{
|
|
417
684
|
__int64 v = 0;
|
|
418
685
|
char* src = (char*)&i64;
|
|
@@ -424,80 +691,229 @@ public:
|
|
|
424
691
|
p[0] = src[6];
|
|
425
692
|
if (m_dec)
|
|
426
693
|
{
|
|
427
|
-
ms = ms << (3 - m_dec / 2) * 8;
|
|
694
|
+
ms = ms << (3 - ((m_dec + 1) / 2)) * 8;
|
|
695
|
+
if (!m_mariadb)
|
|
696
|
+
ms *= ((m_dec % 2) ? 10 : 1);
|
|
428
697
|
p[4] = src[2];
|
|
429
698
|
p[5] = src[1];
|
|
430
699
|
p[6] = src[0];
|
|
431
700
|
}
|
|
432
701
|
return v;
|
|
433
702
|
}
|
|
703
|
+
return datetime;
|
|
704
|
+
}
|
|
434
705
|
|
|
435
|
-
|
|
436
|
-
|
|
706
|
+
char* myTimeStamp::toString(char* p, size_t size)
|
|
707
|
+
{
|
|
708
|
+
if (datetime)
|
|
437
709
|
{
|
|
438
|
-
struct tm* st;
|
|
439
710
|
time_t v = (time_t)datetime;
|
|
440
|
-
st = localtime(&v);
|
|
711
|
+
struct tm* st = localtime(&v);
|
|
441
712
|
|
|
442
713
|
if (m_dec)
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
714
|
+
sprintf_s(p, size, datetime_format_ms, st->tm_year + 1900, st->tm_mon + 1,
|
|
715
|
+
st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec,
|
|
716
|
+
m_dec, (unsigned int)ms);
|
|
717
|
+
else
|
|
718
|
+
sprintf_s(p, size, datetime_format, st->tm_year + 1900, st->tm_mon + 1,
|
|
719
|
+
st->tm_mday, st->tm_hour, st->tm_min, st->tm_sec);
|
|
720
|
+
}else
|
|
721
|
+
{
|
|
722
|
+
if (m_dec)
|
|
723
|
+
sprintf_s(p, size, datetime_format_ms, 0, 0, 0, 0, 0, 0, m_dec, 0);
|
|
446
724
|
else
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
st->tm_sec);
|
|
450
|
-
return p;
|
|
725
|
+
sprintf_s(p, size, datetime_format, 0, 0, 0, 0, 0, 0);
|
|
726
|
+
|
|
451
727
|
}
|
|
452
|
-
|
|
728
|
+
return p;
|
|
729
|
+
}
|
|
453
730
|
|
|
454
|
-
|
|
731
|
+
myTimeStamp& myTimeStamp::operator=(const char* p)
|
|
732
|
+
{
|
|
733
|
+
size_t len = strlen(p);
|
|
734
|
+
struct tm st;
|
|
735
|
+
memset(&st, 0, sizeof(tm));
|
|
736
|
+
i64 = 0;
|
|
737
|
+
if (len > 3)
|
|
738
|
+
{
|
|
739
|
+
st.tm_year = (int)atol(p) - 1900;
|
|
740
|
+
if (len > 6)
|
|
741
|
+
{
|
|
742
|
+
st.tm_mon = (int)atol(p + 5) - 1;
|
|
743
|
+
if (len > 9)
|
|
744
|
+
{
|
|
745
|
+
st.tm_mday = (int)atol(p + 8);
|
|
746
|
+
if (len > 12)
|
|
747
|
+
{
|
|
748
|
+
st.tm_hour = (int)atol(p + 11);
|
|
749
|
+
if (len > 15)
|
|
750
|
+
{
|
|
751
|
+
st.tm_min = (int)atol(p + 14);
|
|
752
|
+
if (len > 18)
|
|
753
|
+
{
|
|
754
|
+
st.tm_sec = (int)atol(p + 17);
|
|
755
|
+
if (m_dec && len > 20)
|
|
756
|
+
{
|
|
757
|
+
char tmp[10] = { 0x00 };
|
|
758
|
+
strncpy(tmp, p + 20, (size_t)m_dec);
|
|
759
|
+
ms = atol(tmp);
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
}
|
|
765
|
+
}
|
|
766
|
+
}
|
|
767
|
+
datetime = (__int64)mktime(&st);
|
|
768
|
+
return *this;
|
|
769
|
+
}
|
|
770
|
+
|
|
771
|
+
char* myTimeStamp::dateStr(char* p, size_t size) const
|
|
772
|
+
{
|
|
773
|
+
if (datetime)
|
|
455
774
|
{
|
|
456
|
-
struct tm* st;
|
|
457
775
|
time_t v = (time_t)datetime;
|
|
458
|
-
st = localtime(&v);
|
|
776
|
+
struct tm* st = localtime(&v);
|
|
777
|
+
sprintf_s(p, size, "%04d-%02d-%02d", st->tm_year + 1900, st->tm_mon + 1,st->tm_mday);
|
|
778
|
+
}else
|
|
779
|
+
sprintf_s(p, size, "%04d-%02d-%02d", 0, 0, 0);
|
|
780
|
+
return p;
|
|
781
|
+
}
|
|
782
|
+
|
|
783
|
+
char* myTimeStamp::timeStr(char* p, size_t size) const
|
|
784
|
+
{
|
|
785
|
+
if (datetime)
|
|
786
|
+
{
|
|
787
|
+
time_t v = (time_t)datetime;
|
|
788
|
+
struct tm* st = localtime(&v);
|
|
459
789
|
|
|
460
790
|
if (m_dec)
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
(unsigned int)ms);
|
|
791
|
+
sprintf_s(p, size, time_format_ms, st->tm_hour, st->tm_min, st->tm_sec,
|
|
792
|
+
m_dec, (unsigned int)ms);
|
|
464
793
|
else
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
794
|
+
sprintf_s(p, size, time_format, st->tm_hour, st->tm_min, st->tm_sec);
|
|
795
|
+
}else
|
|
796
|
+
{
|
|
797
|
+
if (m_dec)
|
|
798
|
+
sprintf_s(p, size, time_format_ms, 0, 0, 0, m_dec, 0);
|
|
799
|
+
else
|
|
800
|
+
sprintf_s(p, size, time_format, 0, 0, 0);
|
|
468
801
|
}
|
|
469
|
-
|
|
470
|
-
|
|
802
|
+
return p;
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
#ifdef _WIN32
|
|
806
|
+
#pragma warning(disable : 4477)
|
|
807
|
+
wchar_t* myTimeStamp::toString(wchar_t* p, size_t size)
|
|
471
808
|
{
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
809
|
+
if (datetime)
|
|
810
|
+
{
|
|
811
|
+
time_t v = (time_t)datetime;
|
|
812
|
+
errno = 0;
|
|
813
|
+
struct tm* st = localtime(&v);
|
|
814
|
+
if (st == NULL)
|
|
815
|
+
{
|
|
816
|
+
swprintf_s(p, size, L"er:%d %s", errno, _tcserror(errno));
|
|
817
|
+
return p;
|
|
818
|
+
}
|
|
819
|
+
if (m_dec)
|
|
820
|
+
swprintf_s(p, size, wdatetime_format_ms, st->tm_year + 1900,
|
|
821
|
+
st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min,
|
|
822
|
+
st->tm_sec, m_dec, (unsigned int)ms);
|
|
823
|
+
else
|
|
824
|
+
swprintf_s(p, size, wdatetime_format, st->tm_year + 1900,
|
|
825
|
+
st->tm_mon + 1, st->tm_mday, st->tm_hour, st->tm_min,
|
|
826
|
+
st->tm_sec);
|
|
827
|
+
}else
|
|
828
|
+
{
|
|
829
|
+
if (m_dec)
|
|
830
|
+
swprintf_s(p, size, wdatetime_format_ms, 0, 0, 0, 0, 0, 0, m_dec, 0);
|
|
831
|
+
else
|
|
832
|
+
swprintf_s(p, size, wdatetime_format, 0, 0, 0, 0, 0, 0);
|
|
833
|
+
}
|
|
834
|
+
return p;
|
|
475
835
|
}
|
|
836
|
+
#pragma warning(default : 4477)
|
|
476
837
|
|
|
477
|
-
|
|
838
|
+
myTimeStamp& myTimeStamp::operator=(const wchar_t* p)
|
|
478
839
|
{
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
840
|
+
size_t len = wcslen(p);
|
|
841
|
+
struct tm st;
|
|
842
|
+
memset(&st, 0, sizeof(tm));
|
|
843
|
+
i64 = 0;
|
|
844
|
+
if (len > 3)
|
|
845
|
+
{
|
|
846
|
+
st.tm_year = (int)_wtol(p) - 1900;
|
|
847
|
+
if (len > 6)
|
|
848
|
+
{
|
|
849
|
+
st.tm_mon = (int)_wtol(p + 5) - 1;
|
|
850
|
+
if (len > 9)
|
|
851
|
+
{
|
|
852
|
+
st.tm_mday = (int)_wtol(p + 8);
|
|
853
|
+
if (len > 12)
|
|
854
|
+
{
|
|
855
|
+
st.tm_hour = (int)_wtol(p + 11);
|
|
856
|
+
if (len > 15)
|
|
857
|
+
{
|
|
858
|
+
st.tm_min = (int)_wtol(p + 14);
|
|
859
|
+
if (len > 18)
|
|
860
|
+
{
|
|
861
|
+
st.tm_sec = (int)_wtol(p + 17);
|
|
862
|
+
if (m_dec && len > 20)
|
|
863
|
+
{
|
|
864
|
+
wchar_t tmp[10] = { 0x00 };
|
|
865
|
+
wcsncpy(tmp, p + 20, (size_t)m_dec);
|
|
866
|
+
ms = _wtol(tmp);
|
|
867
|
+
}
|
|
868
|
+
}
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
}
|
|
874
|
+
datetime = (__int64)mktime(&st);
|
|
875
|
+
return *this;
|
|
482
876
|
}
|
|
483
877
|
|
|
484
|
-
|
|
878
|
+
wchar_t* myTimeStamp::dateStr(wchar_t* p, size_t size) const
|
|
485
879
|
{
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
880
|
+
if (datetime)
|
|
881
|
+
{
|
|
882
|
+
time_t v = (time_t)datetime;
|
|
883
|
+
struct tm* st = localtime(&v);
|
|
884
|
+
swprintf_s(p, size, L"%04d-%02d-%02d", st->tm_year + 1900, st->tm_mon + 1,st->tm_mday);
|
|
885
|
+
}else
|
|
886
|
+
swprintf_s(p, size, L"%04d-%02d-%02d", 0, 0, 0);
|
|
887
|
+
return p;
|
|
489
888
|
}
|
|
490
889
|
|
|
491
|
-
|
|
890
|
+
wchar_t* myTimeStamp::timeStr(wchar_t* p, size_t size) const
|
|
492
891
|
{
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
892
|
+
if (datetime)
|
|
893
|
+
{
|
|
894
|
+
time_t v = (time_t)datetime;
|
|
895
|
+
struct tm* st = localtime(&v);
|
|
896
|
+
|
|
897
|
+
if (m_dec)
|
|
898
|
+
swprintf_s(p, size, wtime_format_ms, st->tm_hour, st->tm_min, st->tm_sec,
|
|
899
|
+
m_dec, (unsigned int)ms);
|
|
900
|
+
else
|
|
901
|
+
swprintf_s(p, size, wtime_format, st->tm_hour, st->tm_min, st->tm_sec);
|
|
902
|
+
}else
|
|
903
|
+
{
|
|
904
|
+
if (m_dec)
|
|
905
|
+
swprintf_s(p, size, wtime_format_ms, 0, 0, 0, m_dec, 0);
|
|
906
|
+
else
|
|
907
|
+
swprintf_s(p, size, wtime_format, 0, 0, 0);
|
|
908
|
+
}
|
|
909
|
+
return p;
|
|
496
910
|
}
|
|
497
|
-
#
|
|
911
|
+
#endif
|
|
912
|
+
|
|
913
|
+
|
|
914
|
+
|
|
915
|
+
#pragma warning(default : 4996)
|
|
498
916
|
|
|
499
|
-
#pragma pack(pop)
|
|
500
|
-
pragma_pop;
|
|
501
917
|
|
|
502
918
|
} // namespace tdap
|
|
503
919
|
} // namespace protocol
|