rucades 0.3.0 → 0.4.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rucades/cplib/Blob.h +205 -163
  3. data/ext/rucades/cplib/CPPEnrollEnumerations.h +603 -0
  4. data/ext/rucades/cplib/DateTime.h +506 -455
  5. data/ext/rucades/cplib/StringProxy.h +229 -187
  6. data/ext/rucades/cplib/cpstldll.h +225 -0
  7. data/ext/rucades/extconf.rb +28 -12
  8. data/ext/rucades/rucades_about.cpp +3 -3
  9. data/ext/rucades/rucades_about.h +1 -1
  10. data/ext/rucades/rucades_algorithm.cpp +2 -2
  11. data/ext/rucades/rucades_algorithm.h +2 -2
  12. data/ext/rucades/rucades_attribute.cpp +3 -3
  13. data/ext/rucades/rucades_attribute.h +2 -2
  14. data/ext/rucades/rucades_attributes.cpp +2 -2
  15. data/ext/rucades/rucades_attributes.h +2 -2
  16. data/ext/rucades/rucades_basic_constraints.cpp +3 -3
  17. data/ext/rucades/rucades_basic_constraints.h +2 -2
  18. data/ext/rucades/rucades_blobs.cpp +3 -3
  19. data/ext/rucades/rucades_blobs.h +2 -2
  20. data/ext/rucades/rucades_certificate.cpp +3 -3
  21. data/ext/rucades/rucades_certificate.h +2 -2
  22. data/ext/rucades/rucades_certificate_status.cpp +2 -2
  23. data/ext/rucades/rucades_certificate_status.h +2 -2
  24. data/ext/rucades/rucades_certificates.cpp +8 -8
  25. data/ext/rucades/rucades_certificates.h +2 -2
  26. data/ext/rucades/rucades_crl.cpp +1 -1
  27. data/ext/rucades/rucades_crl.h +1 -1
  28. data/ext/rucades/rucades_eku.cpp +2 -2
  29. data/ext/rucades/rucades_eku.h +2 -2
  30. data/ext/rucades/rucades_ekus.cpp +3 -3
  31. data/ext/rucades/rucades_ekus.h +2 -2
  32. data/ext/rucades/rucades_encoded_data.cpp +1 -1
  33. data/ext/rucades/rucades_encoded_data.h +1 -1
  34. data/ext/rucades/rucades_enveloped_data.cpp +1 -1
  35. data/ext/rucades/rucades_enveloped_data.h +1 -1
  36. data/ext/rucades/rucades_extended_key_usage.cpp +2 -2
  37. data/ext/rucades/rucades_extended_key_usage.h +2 -2
  38. data/ext/rucades/rucades_hashed_data.cpp +1 -1
  39. data/ext/rucades/rucades_hashed_data.h +1 -1
  40. data/ext/rucades/rucades_key_usage.cpp +3 -3
  41. data/ext/rucades/rucades_key_usage.h +2 -2
  42. data/ext/rucades/rucades_oid.cpp +3 -3
  43. data/ext/rucades/rucades_oid.h +2 -2
  44. data/ext/rucades/rucades_private_key.cpp +3 -3
  45. data/ext/rucades/rucades_private_key.h +2 -2
  46. data/ext/rucades/rucades_public_key.cpp +2 -2
  47. data/ext/rucades/rucades_public_key.h +2 -2
  48. data/ext/rucades/rucades_raw_signature.cpp +2 -2
  49. data/ext/rucades/rucades_raw_signature.h +2 -2
  50. data/ext/rucades/rucades_recipients.cpp +2 -2
  51. data/ext/rucades/rucades_recipients.h +2 -2
  52. data/ext/rucades/rucades_signature_status.cpp +2 -2
  53. data/ext/rucades/rucades_signature_status.h +2 -2
  54. data/ext/rucades/rucades_signed_data.cpp +7 -7
  55. data/ext/rucades/rucades_signed_data.h +1 -1
  56. data/ext/rucades/rucades_signed_xml.cpp +2 -2
  57. data/ext/rucades/rucades_signed_xml.h +1 -1
  58. data/ext/rucades/rucades_signer.cpp +8 -8
  59. data/ext/rucades/rucades_signer.h +2 -2
  60. data/ext/rucades/rucades_signers.cpp +2 -2
  61. data/ext/rucades/rucades_signers.h +2 -2
  62. data/ext/rucades/rucades_store.cpp +2 -2
  63. data/ext/rucades/rucades_store.h +1 -1
  64. data/ext/rucades/rucades_symmetric_algorithm.cpp +3 -3
  65. data/ext/rucades/rucades_symmetric_algorithm.h +2 -2
  66. data/ext/rucades/rucades_version.cpp +2 -2
  67. data/ext/rucades/rucades_version.h +2 -2
  68. data/ext/rucades/stdafx.h +207 -121
  69. data/lib/rucades/version.rb +1 -1
  70. data/samples/encrypt_decrypt.rb +17 -14
  71. data/samples/sign_verify.rb +14 -17
  72. data/sig/rucades.rbs +850 -1
  73. metadata +3 -4
  74. data/ext/rucades/cpstldll.h +0 -183
  75. data/ext/rucades/errormsg.cpp +0 -561
  76. data/ext/rucades/errormsg.h +0 -31
@@ -1,26 +1,68 @@
1
1
  /*
2
- * Copyright(C) 2004 ������ ���
2
+ * Copyright (c) 2026, компания КриптоПро
3
3
  *
4
- * ���� ���� �������� ����������, ����������
5
- * �������������� �������� ������ ���.
4
+ * Разрешается повторное распространение и использование как в виде исходного
5
+ * кода, так и в двоичной форме, с изменениями или без, при соблюдении
6
+ * следующих условий:
6
7
  *
7
- * ����� ����� ����� ����� �� ����� ���� �����������,
8
- * ����������, ���������� �� ������ �����,
9
- * ������������ ��� �������������� ����� ��������,
10
- * ���������������, �������� �� ���� � ��� ��
11
- * ����� ������������ ������� ��� ����������������
12
- * ���������� ���������� ��������� ������ ���.
13
- */
14
-
15
- /*!
16
- * \file $RCSfile$
17
- * \version $Revision$
18
- * \date $Date:: $
19
- * \author $Author$
8
+ * 1) При повторном распространении исходного кода должно оставаться
9
+ * указанное выше уведомление об авторском праве, этот список условий
10
+ * и последующий отказ от гарантий.
11
+ *
12
+ * 2) При повторном распространении двоичного кода должна сохраняться
13
+ * указанная выше информация об авторском праве, этот список условий
14
+ * и последующий отказ от гарантий в документации и/или в других материалах,
15
+ * поставляемых при распространении.
16
+ *
17
+ * ЭТА ПРОГРАММА ПРЕДОСТАВЛЕНА БЕСПЛАТНО ВЛАДЕЛЬЦАМИ АВТОРСКИХ ПРАВ И/ИЛИ
18
+ * ДРУГИМИ СТОРОНАМИ "КАК ОНА ЕСТЬ" БЕЗ КАКОГО-ЛИБО ВИДА ГАРАНТИЙ, ВЫРАЖЕННЫХ
19
+ * ЯВНО ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ИМИ, ПОДРАЗУМЕВАЕМЫЕ
20
+ * ГАРАНТИИ КОММЕРЧЕСКОЙ ЦЕННОСТИ И ПРИГОДНОСТИ ДЛЯ КОНКРЕТНОЙ ЦЕЛИ. НИ В КОЕМ
21
+ * СЛУЧАЕ, ЕСЛИ НЕ ТРЕБУЕТСЯ СООТВЕТСТВУЮЩИМ ЗАКОНОМ, ИЛИ НЕ УСТАНОВЛЕНО В
22
+ * УСТНОЙ ФОРМЕ, НИ ОДИН ВЛАДЕЛЕЦ АВТОРСКИХ ПРАВ И НИ ОДНО ДРУГОЕ ЛИЦО, КОТОРОЕ
23
+ * МОЖЕТ ИЗМЕНЯТЬ И/ИЛИ ПОВТОРНО РАСПРОСТРАНЯТЬ ПРОГРАММУ, КАК БЫЛО СКАЗАНО
24
+ * ВЫШЕ, НЕ НЕСЁТ ОТВЕТСТВЕННОСТИ, ВКЛЮЧАЯ ЛЮБЫЕ ОБЩИЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ
25
+ * ИЛИ ПОСЛЕДОВАВШИЕ УБЫТКИ, ВСЛЕДСТВИЕ ИСПОЛЬЗОВАНИЯ ИЛИ НЕВОЗМОЖНОСТИ
26
+ * ИСПОЛЬЗОВАНИЯ ПРОГРАММЫ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПОТЕРЕЙ ДАННЫХ,
27
+ * ИЛИ ДАННЫМИ, СТАВШИМИ НЕПРАВИЛЬНЫМИ, ИЛИ ПОТЕРЯМИ, ПРИНЕСЕННЫМИ ИЗ-ЗА ВАС ИЛИ
28
+ * ТРЕТЬИХ ЛИЦ, ИЛИ ОТКАЗОМ ПРОГРАММЫ РАБОТАТЬ СОВМЕСТНО С ДРУГИМИ ПРОГРАММАМИ),
29
+ * ДАЖЕ ЕСЛИ ТАКОЙ ВЛАДЕЛЕЦ ИЛИ ДРУГОЕ ЛИЦО БЫЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ
30
+ * ТАКИХ УБЫТКОВ.
31
+ *
32
+ * Copyright (c) 2026, CryptoPro Company All rights reserved.
33
+ *
34
+ * Redistribution and use in source and binary forms, with or without
35
+ * modification, are permitted provided that the following conditions are met:
36
+ *
37
+ * 1) Redistributions of source code must retain the above copyright notice,
38
+ * this list of conditions and the following disclaimer.
20
39
  *
21
- * \brief ����� ��� ������ �� ��������.
40
+ * 2) Redistributions in binary form must reproduce the above copyright notice,
41
+ * this list of conditions and the following disclaimer in the documentation
42
+ * and/or other materials provided with the distribution.
43
+ *
44
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
45
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
46
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
47
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
48
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
49
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
50
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
51
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
52
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
53
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
54
+ * THE POSSIBILITY OF SUCH DAMAGE.
22
55
  */
23
56
 
57
+ /*!
58
+ * \file $RCSfile$
59
+ * \version $Revision$
60
+ * \date $Date:: $
61
+ * \author $Author$
62
+ *
63
+ * \brief Класс для работы со временем.
64
+ */
65
+
24
66
  #ifndef _CPLIB_DATETIME_H_INCLUDED
25
67
  #define _CPLIB_DATETIME_H_INCLUDED
26
68
 
@@ -38,474 +80,483 @@ typedef long long LONGLONG;
38
80
 
39
81
  namespace CryptoPro {
40
82
 
41
- inline ULONG MyInt64Div32(ULONGLONG ll1, ULONG l2)
42
- {
43
- return static_cast<ULONG>(ll1 / l2);
44
- }
45
-
46
- inline void ULongLongToLowHigh(ULONGLONG ll, DWORD &low, DWORD &high)
47
- {
48
- low = static_cast<DWORD>(ll);
49
- high = static_cast<DWORD>(ll >> 32);
50
- }
51
-
52
- inline ULONGLONG ULowHighToLongLong(DWORD low, DWORD high)
53
- {
54
- return static_cast<ULONGLONG>(((static_cast<ULONGLONG>(high)) << 32) + low);
55
- }
56
-
57
- inline void time_tToFileTime( const time_t& src, DWORD& destHigh, DWORD& destLow)
58
- {
59
- ULONGLONG ll = Int32x32To64(src, 10000000) + 116444736000000000ULL;
60
- ULongLongToLowHigh(ll,destLow,destHigh);
61
- }
62
-
63
- inline void FileTimeTotime_t( time_t& dest, const unsigned int& srcHigh, const unsigned int& srcLow)
64
- {
65
- ULONGLONG ll = ULowHighToLongLong(srcLow,srcHigh);
66
- dest=static_cast<time_t>(MyInt64Div32(ll - 116444736000000000ll, 10000000));
67
- return;
68
- }
69
-
70
- inline tm FileTimeToTm(const FILETIME &ftime)
71
- {
72
- tm dest;
73
- SYSTEMTIME time;
74
- if(!::FileTimeToSystemTime(&ftime,&time))
75
- throw;
76
- dest.tm_year = time.wYear - 1900;
77
- dest.tm_mon = time.wMonth - 1;
78
- dest.tm_mday = time.wDay;
79
- dest.tm_wday = time.wDayOfWeek;
80
- dest.tm_hour = time.wHour;
81
- dest.tm_min = time.wMinute;
82
- dest.tm_sec = time.wSecond;
83
- dest.tm_yday = 0;
84
- dest.tm_isdst = 0;
85
- return dest;
86
- }
87
-
88
- class CPLIB_CLASS CDateTime;
89
-
90
- /**
91
- * \class CDateTimeSpan DateTime.h <cplib/DateTime.h>
92
- * \brief ������ �������.
93
- *
94
- * ����� ������ ������ ������� � ��������� �� �������������.
95
- *
96
- * \sa CDateTime
97
- */
98
- class CPLIB_CLASS
99
- CDateTimeSpan
100
- {
101
- public:
102
- /// ������� ������ ������
103
- explicit CDateTimeSpan();
104
- /**
105
- * \brief ������� � �������������� ������
106
- *
107
- * \param alya_generalizedTime [in] ��������� ������������� ������� �������
108
- * \remarks ������ ���������� ������������� ���������: "YYYYMMDDhhmmss.ddddddZ"
109
- * ��� YYYY - ����, MM - ������, DD - ���, hh - ����, mm - ������, ss - �������,
110
- * dddddd - ���� ������� (�� 6-�� ������, ����� ������������� ������ � ��������������
111
- * ������. �������: "00050600114530Z", "00000000000023.123Z", "00000000000003.123456Z"
112
- */
113
- explicit CDateTimeSpan( const char* alya_generalizedTime);
83
+ inline ULONG MyInt64Div32(ULONGLONG ll1, ULONG l2) {
84
+ return static_cast<ULONG>(ll1 / l2);
85
+ }
86
+
87
+ inline void ULongLongToLowHigh(ULONGLONG ll, DWORD& low, DWORD& high) {
88
+ low = static_cast<DWORD>(ll);
89
+ high = static_cast<DWORD>(ll >> 32);
90
+ }
91
+
92
+ inline ULONGLONG ULowHighToLongLong(DWORD low, DWORD high) {
93
+ return static_cast<ULONGLONG>(((static_cast<ULONGLONG>(high)) << 32) + low);
94
+ }
95
+
96
+ inline void time_tToFileTime(const time_t& src, DWORD& destHigh, DWORD& destLow) {
97
+ ULONGLONG ll = Int32x32To64(src, 10000000) + 116444736000000000ULL;
98
+ ULongLongToLowHigh(ll, destLow, destHigh);
99
+ }
100
+
101
+ inline void FileTimeTotime_t(time_t& dest, const unsigned int& srcHigh, const unsigned int& srcLow) {
102
+ ULONGLONG ll = ULowHighToLongLong(srcLow, srcHigh);
103
+ dest = static_cast<time_t>(MyInt64Div32(ll - 116444736000000000ll, 10000000));
104
+ return;
105
+ }
106
+
107
+ inline tm FileTimeToTm(const FILETIME& ftime) {
108
+ tm dest;
109
+ SYSTEMTIME time;
110
+ if (!::FileTimeToSystemTime(&ftime, &time))
111
+ throw;
112
+ dest.tm_year = time.wYear - 1900;
113
+ dest.tm_mon = time.wMonth - 1;
114
+ dest.tm_mday = time.wDay;
115
+ dest.tm_wday = time.wDayOfWeek;
116
+ dest.tm_hour = time.wHour;
117
+ dest.tm_min = time.wMinute;
118
+ dest.tm_sec = time.wSecond;
119
+ dest.tm_yday = 0;
120
+ dest.tm_isdst = 0;
121
+ return dest;
122
+ }
123
+
124
+ class CPLIB_CLASS CDateTime;
125
+
114
126
  /**
115
- * \brief ������� �������������� ������
127
+ * \class CDateTimeSpan DateTime.h <cplib/DateTime.h>
128
+ * \brief Период времени.
116
129
  *
117
- * \param seconds [in] - ���������� ������ ������� �������
118
- * \param microseconds [in] - ���������� ����������� � ������� �������
119
- */
120
- explicit CDateTimeSpan( unsigned seconds, unsigned microseconds = 0);
121
- /**
122
- * \brief ������� ����� ��������� �������.
130
+ * Класс хранит период времени с точностью до миксросекунды.
123
131
  *
124
- * \param src [in] ������, ����� �������� ���������
132
+ * \sa CDateTime
125
133
  */
126
- CDateTimeSpan( const CDateTimeSpan& src);
134
+ class CPLIB_CLASS
135
+ CDateTimeSpan
136
+ {
137
+ public:
138
+ /// Создает пустой объект
139
+ explicit CDateTimeSpan();
140
+ /**
141
+ * \brief Создает и инициализирует объект
142
+ *
143
+ * \param alya_generalizedTime [in] строковое представление периода времени
144
+ * \remarks Формат строкового представления следующий: "YYYYMMDDhhmmss.ddddddZ"
145
+ * где YYYY - годы, MM - месяцы, DD - дни, hh - часы, mm - минуты, ss - секудны,
146
+ * dddddd - доли секунды (до 6-ти знаков, могут отсутствовать вместе с разделительной
147
+ * точкой. Примеры: "00050600114530Z", "00000000000023.123Z", "00000000000003.123456Z"
148
+ */
149
+ explicit CDateTimeSpan(const char* alya_generalizedTime);
150
+ /**
151
+ * \brief Создает и инициализирует объект
152
+ *
153
+ * \param seconds [in] - количество секунд в периоде времени
154
+ * \param microseconds [in] - количество микросекунд в периоде времени
155
+ */
156
+ explicit CDateTimeSpan(unsigned seconds, unsigned microseconds = 0);
157
+ /**
158
+ * \brief Создает копию заданного объекта.
159
+ *
160
+ * \param src [in] объект, копия которого создается
161
+ */
162
+ CDateTimeSpan(const CDateTimeSpan& src);
127
163
 
128
- /**
129
- * \brief ���������� ������ ������� ��������� ������� (ANSI)
130
- * \sa getGeneralizedTime(), towstring(), CDateTimeSpan()
131
- */
132
- CStringProxy tostring() const;
133
- /**
134
- * \brief ���������� ������ ������� ��������� ������� (Unicode)
135
- * \sa getGeneralizedTime(), tostring(), CDateTimeSpan()
136
- */
137
- CWStringProxy towstring() const;
138
- /**
139
- * \brief ���������� ������ ������� ��������� ������� (ANSI)
140
- * \sa tostring(), towstring(), CDateTimeSpan()
141
- */
142
- CStringProxy getGeneralizedTime() const;
164
+ /**
165
+ * \brief Возвращает период времени в строковом формате (ANSI)
166
+ * \sa getGeneralizedTime(), towstring(), CDateTimeSpan()
167
+ */
168
+ CStringProxy tostring() const;
169
+ /**
170
+ * \brief Возвращает период времени в строковом формате (Unicode)
171
+ * \sa getGeneralizedTime(), tostring(), CDateTimeSpan()
172
+ */
173
+ CWStringProxy towstring() const;
174
+ /**
175
+ * \brief Возвращает период времени в строковом формате (ANSI)
176
+ * \sa tostring(), towstring(), CDateTimeSpan()
177
+ */
178
+ CStringProxy getGeneralizedTime() const;
143
179
 
144
- /**
145
- * \brief ���������� ������� ����� ���������� ����������
146
- */
147
- DWORD getLowPart();
180
+ /**
181
+ * \brief Возвращает младшую часть внутренней переменной
182
+ */
183
+ DWORD getLowPart();
148
184
 
149
- /**
150
- * \brief ���������� ������� ����� ���������� ����������
151
- */
152
- DWORD getHighPart();
185
+ /**
186
+ * \brief Возвращает старшую часть внутренней переменной
187
+ */
188
+ DWORD getHighPart();
189
+
190
+ /**
191
+ * \brief Создает копию заданного объекта.
192
+ *
193
+ * \param src [in] объект, копия которого создается
194
+ */
195
+ CDateTimeSpan& operator=(const CDateTimeSpan& src);
196
+ /**
197
+ * \brief Операция обмена объектов.
198
+ *
199
+ * \param src [in] объект для обмена
200
+ * \remarks Функция не генерирует исключений.
201
+ */
202
+ void swap(CDateTimeSpan& src) throw();
203
+
204
+ CPLIB_API friend bool operator==(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
205
+ CPLIB_API friend bool operator!=(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
206
+ CPLIB_API friend bool operator<=(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
207
+ CPLIB_API friend bool operator>=(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
208
+ CPLIB_API friend bool operator<(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
209
+ CPLIB_API friend bool operator>(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
210
+ CPLIB_API friend CDateTime& operator +=(CDateTime& lhs, const CDateTimeSpan& rhs);
211
+ CPLIB_API friend CDateTime& operator -=(CDateTime& lhs, const CDateTimeSpan& rhs);
212
+ CPLIB_API friend CDateTimeSpan& operator +=(CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
213
+ CPLIB_API friend CDateTimeSpan& operator -=(CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
214
+ CPLIB_API friend CDateTimeSpan operator -(const CDateTime& lhs, const CDateTime& rhs);
215
+
216
+ CPLIB_API friend CDateTimeSpan& operator *=(CDateTimeSpan& lhs, unsigned rhs);
217
+ CPLIB_API friend CDateTimeSpan& operator /=(CDateTimeSpan& lhs, unsigned rhs);
218
+ CPLIB_API friend CDateTimeSpan& operator %=(CDateTimeSpan& lhs, unsigned rhs);
219
+
220
+ CPLIB_API friend CDateTimeSpan operator *(const CDateTimeSpan& lhs, unsigned rhs);
221
+ CPLIB_API friend CDateTimeSpan operator /(const CDateTimeSpan& lhs, unsigned rhs);
222
+ CPLIB_API friend CDateTimeSpan operator %(const CDateTimeSpan& lhs, unsigned rhs);
223
+
224
+ CPLIB_API friend unsigned operator / (const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
225
+ CPLIB_API friend CDateTimeSpan operator % (const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
226
+
227
+ static const CDateTimeSpan& OneYear();
228
+ static const CDateTimeSpan& OneMonth();
229
+ static const CDateTimeSpan& OneDay();
230
+ static const CDateTimeSpan& OneHour();
231
+ static const CDateTimeSpan& OneMinute();
232
+ static const CDateTimeSpan& OneSecond();
233
+ static const CDateTimeSpan& OneMillisecond();
234
+
235
+ private:
236
+ /// Период один год (365 дней)
237
+ static const CDateTimeSpan oneYear;
238
+ /// Период один месяц (30 дней)
239
+ static const CDateTimeSpan oneMonth;
240
+ /// Период один день
241
+ static const CDateTimeSpan oneDay;
242
+ /// Период один час
243
+ static const CDateTimeSpan oneHour;
244
+ /// Период одна минута
245
+ static const CDateTimeSpan oneMinute;
246
+ /// Период одна секунда
247
+ static const CDateTimeSpan oneSecond;
248
+ /// Период одна миллисекунда
249
+ static const CDateTimeSpan oneMillisecond;
250
+
251
+ DWORD high_;
252
+ DWORD low_;
253
+ };
153
254
 
154
255
  /**
155
- * \brief ������� ����� ��������� �������.
156
- *
157
- * \param src [in] ������, ����� �������� ���������
158
- */
159
- CDateTimeSpan& operator=( const CDateTimeSpan& src);
160
- /**
161
- * \brief �������� ������ ��������.
256
+ * \class CDateTime DateTime.h <cplib/DateTime.h>
257
+ * \brief Время.
162
258
  *
163
- * \param src [in] ������ ��� ������
164
- * \remarks ������� �� ���������� ����������.
165
- */
166
- void swap( CDateTimeSpan &src ) throw();
167
-
168
- CPLIB_API friend bool operator==( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
169
- CPLIB_API friend bool operator!=( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
170
- CPLIB_API friend bool operator<=( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
171
- CPLIB_API friend bool operator>=( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
172
- CPLIB_API friend bool operator<( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
173
- CPLIB_API friend bool operator>( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
174
- CPLIB_API friend CDateTime& operator +=( CDateTime &lhs, const CDateTimeSpan& rhs);
175
- CPLIB_API friend CDateTime& operator -=( CDateTime &lhs, const CDateTimeSpan& rhs);
176
- CPLIB_API friend CDateTimeSpan& operator +=( CDateTimeSpan &lhs, const CDateTimeSpan& rhs);
177
- CPLIB_API friend CDateTimeSpan& operator -=( CDateTimeSpan &lhs, const CDateTimeSpan& rhs);
178
- CPLIB_API friend CDateTimeSpan operator -( const CDateTime &lhs, const CDateTime &rhs);
179
-
180
- CPLIB_API friend CDateTimeSpan& operator *=( CDateTimeSpan &lhs, unsigned rhs);
181
- CPLIB_API friend CDateTimeSpan& operator /=( CDateTimeSpan &lhs, unsigned rhs);
182
- CPLIB_API friend CDateTimeSpan& operator %=( CDateTimeSpan &lhs, unsigned rhs);
183
-
184
- CPLIB_API friend CDateTimeSpan operator *( const CDateTimeSpan &lhs, unsigned rhs);
185
- CPLIB_API friend CDateTimeSpan operator /( const CDateTimeSpan &lhs, unsigned rhs);
186
- CPLIB_API friend CDateTimeSpan operator %( const CDateTimeSpan &lhs, unsigned rhs);
187
-
188
- CPLIB_API friend unsigned operator / (const CDateTimeSpan &lhs, const CDateTimeSpan &rhs);
189
- CPLIB_API friend CDateTimeSpan operator % ( const CDateTimeSpan &lhs, const CDateTimeSpan &rhs );
190
-
191
- static const CDateTimeSpan& OneYear();
192
- static const CDateTimeSpan& OneMonth();
193
- static const CDateTimeSpan& OneDay();
194
- static const CDateTimeSpan& OneHour();
195
- static const CDateTimeSpan& OneMinute();
196
- static const CDateTimeSpan& OneSecond();
197
- static const CDateTimeSpan& OneMillisecond();
198
-
199
- private:
200
- /// ������ ���� ��� (365 ����)
201
- static const CDateTimeSpan oneYear;
202
- /// ������ ���� ����� (30 ����)
203
- static const CDateTimeSpan oneMonth;
204
- /// ������ ���� ����
205
- static const CDateTimeSpan oneDay;
206
- /// ������ ���� ���
207
- static const CDateTimeSpan oneHour;
208
- /// ������ ���� ������
209
- static const CDateTimeSpan oneMinute;
210
- /// ������ ���� �������
211
- static const CDateTimeSpan oneSecond;
212
- /// ������ ���� ������������
213
- static const CDateTimeSpan oneMillisecond;
214
-
215
- DWORD high_;
216
- DWORD low_;
217
- };
218
-
219
- /**
220
- * \class CDateTime DateTime.h <cplib/DateTime.h>
221
- * \brief �����.
222
- *
223
- * ����� ������ �������� ������� � ��������� �� �������������.
224
- *
225
- * \sa CDateTimeSpan
226
- */
227
- class CPLIB_CLASS
228
- CDateTime
229
- {
230
- public:
231
- /**
232
- * \brief ������� � �������������� ������
259
+ * Класс хранит значение времени с точностью до миксросекунды.
233
260
  *
234
- * \param time [in] - ����� � ������� __time64_t
235
- * \param micro [in] - ���������� �����������
261
+ * \sa CDateTimeSpan
236
262
  */
237
- explicit CDateTime( long long time = 0, unsigned int micro = 0);
238
- /**
239
- * \brief ������� � �������������� ������
263
+ class CPLIB_CLASS
264
+ CDateTime
265
+ {
266
+ public:
267
+ /**
268
+ * \brief Создает и инициализирует объект
269
+ *
270
+ * \param time [in] - время в формате __time64_t
271
+ * \param micro [in] - количество микросекунд
272
+ */
273
+ explicit CDateTime(long long time = 0, unsigned int micro = 0);
274
+ /**
275
+ * \brief Создает и инициализирует объект
276
+ *
277
+ * \param generalizedTime [in] строковое представление периода времени
278
+ * \remarks Формат строкового представления следующий: "YYYYMMDDhhmmss.ddddddZ"
279
+ * где YYYY - годы, MM - месяцы, DD - дни, hh - часы, mm - минуты, ss - секудны,
280
+ * dddddd - доли секунды (до 6-ти знаков, могут отсутствовать вместе с разделительной
281
+ * точкой. Примеры: "20041105114530Z", "19940821101532.123Z", "19940821101532.123456Z"
282
+ */
283
+ explicit CDateTime(const char* generalizedTime);
284
+ /**
285
+ * \brief Создает и инициализирует объект
240
286
  *
241
- * \param generalizedTime [in] ��������� ������������� ������� �������
242
- * \remarks ������ ���������� ������������� ���������: "YYYYMMDDhhmmss.ddddddZ"
243
- * ��� YYYY - ����, MM - ������, DD - ���, hh - ����, mm - ������, ss - �������,
244
- * dddddd - ���� ������� (�� 6-�� ������, ����� ������������� ������ � ��������������
245
- * ������. �������: "20041105114530Z", "19940821101532.123Z", "19940821101532.123456Z"
287
+ * \param time [in] - время в формате __time32_t
288
+ * \param micro [in] - количество микросекунд
246
289
  */
247
- explicit CDateTime( const char* generalizedTime);
290
+ CDateTime(long time, unsigned int micro);
248
291
  /**
249
- * \brief ������� �������������� ������
250
- *
251
- * \param time [in] - ����� ������� __time32_t
252
- * \param micro [in] - ���������� �����������
292
+ * \brief Создает и инициализирует объект
293
+ *
294
+ * \param filetime [in] время в формате FILETIME
295
+ */
296
+ CDateTime(FILETIME filetime);
297
+ /**
298
+ * \brief Создает и инициализирует объект
299
+ *
300
+ * \param systemtime [in] время в формате SYSTEMTIME
301
+ */
302
+ CDateTime(SYSTEMTIME systemtime);
303
+ /**
304
+ * \brief Создает и инициализирует объект
305
+ *
306
+ * \param year [in] год
307
+ * \param month [in] месяц
308
+ * \param day [in] день
309
+ * \param hour [in] час
310
+ * \param minute [in] минуты
311
+ * \param second [in] секунды
312
+ * \param milli [in] миллисекунды
313
+ * \param micro [in] микросекунды
314
+ */
315
+ CDateTime(
316
+ unsigned int year,
317
+ unsigned int month,
318
+ unsigned int day,
319
+ unsigned int hour = 0,
320
+ unsigned int minute = 0,
321
+ unsigned int second = 0,
322
+ unsigned int milli = 0,
323
+ unsigned int micro = 0);
324
+ /**
325
+ * \brief Создает копию заданного объекта.
326
+ *
327
+ * \param time [in] объект, копия которого создается
328
+ */
329
+ CDateTime(const CDateTime& time);
330
+ /**
331
+ * \brief Создает копию заданного объекта.
332
+ *
333
+ * \param src [in] объект, копия которого создается
334
+ */
335
+ CDateTime& operator=(const CDateTime& src);
336
+ /**
337
+ * \brief Операция обмена объектов.
338
+ *
339
+ * \param src [in] объект для обмена
340
+ * \remarks Функция не генерирует исключений.
341
+ */
342
+ void swap(CDateTime& src) throw();
343
+
344
+ /// Возвращает год
345
+ unsigned int year() const;
346
+ /// Возвращает месяц
347
+ unsigned int month() const;
348
+ /// Возвращает день
349
+ unsigned int day() const;
350
+ /// Возвращает час
351
+ unsigned int hour() const;
352
+ /// Возвращает минуту
353
+ unsigned int minute() const;
354
+ /// Возвращает секунды
355
+ unsigned int second() const;
356
+ /// Возвращает миллисекунды
357
+ unsigned int millisecond() const;
358
+ /// Возвращает микросекунды
359
+ unsigned int microsecond() const;
360
+
361
+ /**
362
+ * \brief Возвращает время в строковом формате (ANSI)
363
+ * \sa getTime(), getFileTime(), getSystemTime(), tostring(), towstring(), CDateTimeSpan
364
+ */
365
+ CStringProxy getGeneralizedTime() const;
366
+ CStringProxy getGeneralizedTimeTrimMicroseconds() const;
367
+ /**
368
+ * \brief Возвращает время в формате time_t
369
+ * \sa getGeneralizedTime(), getFileTime(), getSystemTime(), tostring(), towstring(), CDateTimeSpan
370
+ */
371
+ time_t getTime() const;
372
+ /**
373
+ * \brief Возвращает время в формате FILETIME
374
+ * \sa getGeneralizedTime(), getTime(), getSystemTime(), tostring(), towstring(), CDateTimeSpan
375
+ */
376
+ FILETIME getFileTime() const;
377
+ /**
378
+ * \brief Возвращает время в формате SYSTEMTIME
379
+ * \sa getGeneralizedTime(), getTime(), getFileTime(), tostring(), towstring(), CDateTimeSpan
380
+ */
381
+ SYSTEMTIME getSystemTime() const;
382
+ /**
383
+ * \brief Возвращает время в локализованном строковом формате (ANSI)
384
+ * \sa getGeneralizedTime(), getTime(), getFileTime(), getSystemTime(), towstring(), CDateTimeSpan
385
+ */
386
+ CStringProxy tostring() const;
387
+ /**
388
+ * \brief Возвращает время в локализованном строковом формате (Unicode)
389
+ * \sa getGeneralizedTime(), getTime(), getFileTime(), getSystemTime(), tostring(), CDateTimeSpan
390
+ */
391
+ CWStringProxy towstring() const;
392
+ /**
393
+ * \brief Возвращает время, преобразованное к локальному представлению
394
+ * \sa localToUtc()
395
+ */
396
+ CDateTime utcToLocal() const;
397
+ /**
398
+ * \brief Возвращает время, преобразованное к представлению в системе универсального координированного времени (UTC)
399
+ * \sa utcToLocal()
400
+ */
401
+ CDateTime localToUtc() const;
402
+
403
+ /// Возвращает объект с текущим значение времени с точностью до микросекунд в системе универсального координированного времени (UTC)
404
+ static CDateTime Now();
405
+
406
+ /// Возвращает объект с текущим значение времени с точностью до микросекунд в системе универсального координированного времени (UTC)
407
+ static CDateTime GetCurrentTime() { return Now(); }
408
+
409
+ CPLIB_API friend bool operator==(const CDateTime& lhs, const CDateTime& rhs);
410
+ CPLIB_API friend bool operator!=(const CDateTime& lhs, const CDateTime& rhs);
411
+ CPLIB_API friend bool operator<=(const CDateTime& lhs, const CDateTime& rhs);
412
+ CPLIB_API friend bool operator>=(const CDateTime& lhs, const CDateTime& rhs);
413
+ CPLIB_API friend bool operator<(const CDateTime& lhs, const CDateTime& rhs);
414
+ CPLIB_API friend bool operator>(const CDateTime& lhs, const CDateTime& rhs);
415
+ CPLIB_API friend CDateTime& operator +=(CDateTime& lhs, const CDateTimeSpan& rhs);
416
+ CPLIB_API friend CDateTime& operator -=(CDateTime& lhs, const CDateTimeSpan& rhs);
417
+ CPLIB_API friend CDateTimeSpan operator -(const CDateTime& lhs, const CDateTime& rhs);
418
+
419
+ #ifdef UNIX
420
+ CDateTime(timeval tval);
421
+ timeval getTimeval() const;
422
+ #endif // UNIX
423
+ private:
424
+ DWORD high_;
425
+ DWORD low_;
426
+ };
427
+
428
+ /// Операция проверки на равенство
429
+ CPLIB_API bool operator==(const CDateTime& lhs, const CDateTime& rhs);
430
+ /// Операция проверки на неравенство
431
+ CPLIB_API bool operator!=(const CDateTime& lhs, const CDateTime& rhs);
432
+ /// Операция сравнения (меньше или равно)
433
+ CPLIB_API bool operator<=(const CDateTime& lhs, const CDateTime& rhs);
434
+ /// Операция сравнения (больше или равно)
435
+ CPLIB_API bool operator>=(const CDateTime& lhs, const CDateTime& rhs);
436
+ /// Операция сравнения (меньше)
437
+ CPLIB_API bool operator<(const CDateTime& lhs, const CDateTime& rhs);
438
+ /// Операция сравнения (больше)
439
+ CPLIB_API bool operator>(const CDateTime& lhs, const CDateTime& rhs);
440
+
441
+ /// Операция проверки на равенство
442
+ CPLIB_API bool operator==(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
443
+ /// Операция проверки на неравенство
444
+ CPLIB_API bool operator!=(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
445
+ /// Операция сравнения (меньше или равно)
446
+ CPLIB_API bool operator<=(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
447
+ /// Операция сравнения (больше или равно)
448
+ CPLIB_API bool operator>=(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
449
+ /// Операция сравнения (меньше)
450
+ CPLIB_API bool operator<(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
451
+ /// Операция сравнения (больше)
452
+ CPLIB_API bool operator>(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
453
+ /// Операция прибавления периода ко времени
454
+ CPLIB_API CDateTime& operator +=(CDateTime& lhs, const CDateTimeSpan& rhs);
455
+ /// Операция вычитания периода из времени
456
+ CPLIB_API CDateTime& operator -=(CDateTime& lhs, const CDateTimeSpan& rhs);
457
+
458
+ /// Операция прибавления периода к периоду
459
+ CPLIB_API CDateTimeSpan& operator +=(CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
460
+ /**
461
+ * \brief Операция вычитания периода из периода
462
+ * \remark Период времени не может буть отрицательным. Если в результате
463
+ * вычитания получается отрицательный период, генерируется исключение.
253
464
  */
254
- CDateTime( long time, unsigned int micro);
465
+ CPLIB_API CDateTimeSpan& operator -=(CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
466
+
467
+ /// Операция умножения периода на число
468
+ CPLIB_API CDateTimeSpan& operator *=(CDateTimeSpan& lhs, unsigned rhs);
469
+ /// Операция деления периода на число
470
+ CPLIB_API CDateTimeSpan& operator /=(CDateTimeSpan& lhs, unsigned rhs);
471
+ /// Операция получения остатка от деления периода на число
472
+ CPLIB_API CDateTimeSpan& operator %=(CDateTimeSpan& lhs, unsigned rhs);
473
+
474
+ /// Операция умножения периода на число
475
+ CPLIB_API CDateTimeSpan operator *(const CDateTimeSpan& lhs, unsigned rhs);
476
+ /// Операция деления периода на число
477
+ CPLIB_API CDateTimeSpan operator /(const CDateTimeSpan& lhs, unsigned rhs);
478
+ /// Операция получения остатка от деления периода на число
479
+ CPLIB_API CDateTimeSpan operator %(const CDateTimeSpan& lhs, unsigned rhs);
480
+
481
+ /// Операция деления периода на период
482
+ CPLIB_API unsigned operator / (const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
483
+ /// Операция получения остатка от деления периода на период
484
+ CPLIB_API CDateTimeSpan operator % (const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
485
+
255
486
  /**
256
- * \brief ������� �������������� ������
257
- *
258
- * \param filetime [in] ����� ������� FILETIME
487
+ * \brief Операция вычитания периода из периода
488
+ * \remark Период времени не может буть отрицательным. Если в результате
489
+ * вычитания получается отрицательный период, генерируется исключение.
259
490
  */
260
- CDateTime( FILETIME filetime);
491
+ CPLIB_API CDateTimeSpan operator -(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
261
492
  /**
262
- * \brief ������� �������������� ������
263
- *
264
- * \param systemtime [in] ����� ������� SYSTEMTIME
493
+ * \brief Операция вычитания времени из времени
494
+ * \remark Период времени не может буть отрицательным. При вычитании
495
+ * более позднего момента времени из более раннего генерируется исключение
265
496
  */
266
- CDateTime( SYSTEMTIME systemtime);
497
+ CPLIB_API CDateTimeSpan operator -(const CDateTime& lhs, const CDateTime& rhs);
498
+ /// Операция вычитания периода из даты
499
+ CPLIB_API CDateTime operator -(const CDateTime& lhs, const CDateTimeSpan& rhs);
500
+
501
+ /// Операция прибавления периода к периоду
502
+ CPLIB_API CDateTimeSpan operator +(const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
503
+ /// Операция прибавления периода ко времени
504
+ CPLIB_API CDateTime operator +(const CDateTime& lhs, const CDateTimeSpan& rhs);
505
+
267
506
  /**
268
- * \brief ������� �������������� ������
507
+ * \brief Функция прибавления к дате заданного отрезка времени
508
+ *
509
+ * \param intervalUnit [in] единицы измерения в которых задаётся интервал, значение
510
+ * параметра может быть равным:
511
+ * - "s" - секунды;
512
+ * - "n" - минуты;
513
+ * - "h" - часы;
514
+ * - "d" - дни;
515
+ * - "w" - недели;
516
+ * - "m" - месяцы;
517
+ * - "y" - годы.
518
+ * \param interval [in] размер прибавляемого интервала
519
+ * \param value [in] дата, к которой прибавляется интервал
269
520
  *
270
- * \param year [in] ���
271
- * \param month [in] �����
272
- * \param day [in] ����
273
- * \param hour [in] ���
274
- * \param minute [in] ������
275
- * \param second [in] �������
276
- * \param milli [in] ������������
277
- * \param micro [in] ������������
521
+ * \return Новое значение даты.
278
522
  */
279
- CDateTime(
280
- unsigned int year,
281
- unsigned int month,
282
- unsigned int day,
283
- unsigned int hour = 0,
284
- unsigned int minute = 0,
285
- unsigned int second = 0,
286
- unsigned int milli = 0,
287
- unsigned int micro = 0);
523
+ CPLIB_API CDateTime DateAddA(const char* intervalUnit,
524
+ int interval, const CDateTime& value);
525
+
288
526
  /**
289
- * \brief ������� ����� ��������� �������.
290
- *
291
- * \param time [in] ������, ����� �������� ���������
292
- */
293
- CDateTime( const CDateTime& time);
527
+ * \brief Функция прибавления к дате заданного отрезка времени
528
+ *
529
+ * \param intervalUnit [in] единицы измерения в которых задаётся интервал, значение
530
+ * параметра может быть равным:
531
+ * - "s" - секунды;
532
+ * - "n" - минуты;
533
+ * - "h" - часы;
534
+ * - "d" - дни;
535
+ * - "w" - недели;
536
+ * - "m" - месяцы;
537
+ * - "y" - годы.
538
+ * \param interval [in] размер прибавляемого интервала
539
+ * \param value [in] дата, к которой прибавляется интервал
540
+ *
541
+ * \return Новое значение даты.
542
+ */
543
+ CPLIB_API CDateTime DateAddW(const wchar_t* intervalUnit,
544
+ int interval, const CDateTime& value);
545
+
294
546
  /**
295
- * \brief ������� ����� ��������� �������.
547
+ * \brief Функция возвращает объект со временем (UTC), извлеченным из строки, представленной в формате xsd:dateTime.
296
548
  *
297
- * \param src [in] ������, ����� �������� ���������
549
+ * \param lexicalDateTime [in] строка в формате xsd:dateTime
550
+ * \sa toXsdDateTimeString()
298
551
  */
299
- CDateTime& operator=( const CDateTime& src);
552
+ CPLIB_API CDateTime fromXsdDateTimeString(const char* lexicalDateTime);
300
553
  /**
301
- * \brief �������� ������ ��������.
554
+ * \brief Функция возвращает строку в формате xsd:dateTime со значением переданного времени с точностью до миллисекунд в системе универсального координированного времени (UTC) или пустую строку в случае ошибки.
302
555
  *
303
- * \param src [in] ������ ��� ������
304
- * \remarks ������� �� ���������� ����������.
305
- */
306
- void swap( CDateTime &src ) throw();
307
-
308
- /// ���������� ���
309
- unsigned int year() const;
310
- /// ���������� �����
311
- unsigned int month() const;
312
- /// ���������� ����
313
- unsigned int day() const;
314
- /// ���������� ���
315
- unsigned int hour() const;
316
- /// ���������� ������
317
- unsigned int minute() const;
318
- /// ���������� �������
319
- unsigned int second() const;
320
- /// ���������� ������������
321
- unsigned int millisecond() const;
322
- /// ���������� ������������
323
- unsigned int microsecond() const;
324
-
325
- /**
326
- * \brief ���������� ����� � ��������� ������� (ANSI)
327
- * \sa getTime(), getFileTime(), getSystemTime(), tostring(), towstring(), CDateTimeSpan
328
- */
329
- CStringProxy getGeneralizedTime() const;
330
- CStringProxy getGeneralizedTimeTrimMicroseconds() const;
331
- /**
332
- * \brief ���������� ����� � ������� time_t
333
- * \sa getGeneralizedTime(), getFileTime(), getSystemTime(), tostring(), towstring(), CDateTimeSpan
334
- */
335
- time_t getTime() const;
336
- /**
337
- * \brief ���������� ����� � ������� FILETIME
338
- * \sa getGeneralizedTime(), getTime(), getSystemTime(), tostring(), towstring(), CDateTimeSpan
339
- */
340
- FILETIME getFileTime() const;
341
- /**
342
- * \brief ���������� ����� � ������� SYSTEMTIME
343
- * \sa getGeneralizedTime(), getTime(), getFileTime(), tostring(), towstring(), CDateTimeSpan
344
- */
345
- SYSTEMTIME getSystemTime() const;
346
- /**
347
- * \brief ���������� ����� � �������������� ��������� ������� (ANSI)
348
- * \sa getGeneralizedTime(), getTime(), getFileTime(), getSystemTime(), towstring(), CDateTimeSpan
349
- */
350
- CStringProxy tostring() const;
351
- /**
352
- * \brief ���������� ����� � �������������� ��������� ������� (Unicode)
353
- * \sa getGeneralizedTime(), getTime(), getFileTime(), getSystemTime(), tostring(), CDateTimeSpan
556
+ * \param dateTime [in] время
557
+ * \sa fromXsdDateTimeString()
354
558
  */
355
- CWStringProxy towstring() const;
356
- /**
357
- * \brief ���������� �����, ��������������� � ���������� �������������
358
- * \sa localToUtc()
359
- */
360
- CDateTime utcToLocal() const;
361
- /**
362
- * \brief ���������� �����, ��������������� � ������������� � ������� �������������� ����������������� ������� (UTC)
363
- * \sa utcToLocal()
364
- */
365
- CDateTime localToUtc() const;
366
-
367
- /// ���������� ������ � ������� �������� ������� � ��������� �� ������������ � ������� �������������� ����������������� ������� (UTC)
368
- static CDateTime Now();
369
-
370
- /// ���������� ������ � ������� �������� ������� � ��������� �� ������������ � ������� �������������� ����������������� ������� (UTC)
371
- static CDateTime GetCurrentTime(){return Now();}
372
-
373
- CPLIB_API friend bool operator==( const CDateTime& lhs, const CDateTime& rhs);
374
- CPLIB_API friend bool operator!=( const CDateTime& lhs, const CDateTime& rhs);
375
- CPLIB_API friend bool operator<=( const CDateTime& lhs, const CDateTime& rhs);
376
- CPLIB_API friend bool operator>=( const CDateTime& lhs, const CDateTime& rhs);
377
- CPLIB_API friend bool operator<( const CDateTime& lhs, const CDateTime& rhs);
378
- CPLIB_API friend bool operator>( const CDateTime& lhs, const CDateTime& rhs);
379
- CPLIB_API friend CDateTime& operator +=( CDateTime &lhs, const CDateTimeSpan& rhs);
380
- CPLIB_API friend CDateTime& operator -=( CDateTime &lhs, const CDateTimeSpan& rhs);
381
- CPLIB_API friend CDateTimeSpan operator -( const CDateTime &lhs, const CDateTime &rhs);
382
-
383
- #ifdef UNIX
384
- CDateTime( timeval tval);
385
- timeval getTimeval() const;
386
- #endif // UNIX
387
- private:
388
- DWORD high_;
389
- DWORD low_;
390
- };
391
-
392
- /// �������� �������� �� ���������
393
- CPLIB_API bool operator==( const CDateTime& lhs, const CDateTime& rhs);
394
- /// �������� �������� �� �����������
395
- CPLIB_API bool operator!=( const CDateTime& lhs, const CDateTime& rhs);
396
- /// �������� ��������� (������ ��� �����)
397
- CPLIB_API bool operator<=( const CDateTime& lhs, const CDateTime& rhs);
398
- /// �������� ��������� (������ ��� �����)
399
- CPLIB_API bool operator>=( const CDateTime& lhs, const CDateTime& rhs);
400
- /// �������� ��������� (������)
401
- CPLIB_API bool operator<( const CDateTime& lhs, const CDateTime& rhs);
402
- /// �������� ��������� (������)
403
- CPLIB_API bool operator>( const CDateTime& lhs, const CDateTime& rhs);
404
-
405
- /// �������� �������� �� ���������
406
- CPLIB_API bool operator==( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
407
- /// �������� �������� �� �����������
408
- CPLIB_API bool operator!=( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
409
- /// �������� ��������� (������ ��� �����)
410
- CPLIB_API bool operator<=( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
411
- /// �������� ��������� (������ ��� �����)
412
- CPLIB_API bool operator>=( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
413
- /// �������� ��������� (������)
414
- CPLIB_API bool operator<( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
415
- /// �������� ��������� (������)
416
- CPLIB_API bool operator>( const CDateTimeSpan& lhs, const CDateTimeSpan& rhs);
417
- /// �������� ����������� ������� �� �������
418
- CPLIB_API CDateTime& operator +=( CDateTime &lhs, const CDateTimeSpan& rhs);
419
- /// �������� ��������� ������� �� �������
420
- CPLIB_API CDateTime& operator -=( CDateTime &lhs, const CDateTimeSpan& rhs);
421
-
422
- /// �������� ����������� ������� � �������
423
- CPLIB_API CDateTimeSpan& operator +=( CDateTimeSpan &lhs, const CDateTimeSpan& rhs);
424
- /**
425
- * \brief �������� ��������� ������� �� �������
426
- * \remark ������ ������� �� ����� ���� �������������. ���� � ����������
427
- * ��������� ���������� ������������� ������, ������������ ����������.
428
- */
429
- CPLIB_API CDateTimeSpan& operator -=( CDateTimeSpan &lhs, const CDateTimeSpan& rhs);
430
-
431
- /// �������� ��������� ������� �� �����
432
- CPLIB_API CDateTimeSpan& operator *=( CDateTimeSpan &lhs, unsigned rhs);
433
- /// �������� ������� ������� �� �����
434
- CPLIB_API CDateTimeSpan& operator /=( CDateTimeSpan &lhs, unsigned rhs);
435
- /// �������� ��������� ������� �� ������� ������� �� �����
436
- CPLIB_API CDateTimeSpan& operator %=( CDateTimeSpan &lhs, unsigned rhs);
437
-
438
- /// �������� ��������� ������� �� �����
439
- CPLIB_API CDateTimeSpan operator *( const CDateTimeSpan &lhs, unsigned rhs);
440
- /// �������� ������� ������� �� �����
441
- CPLIB_API CDateTimeSpan operator /( const CDateTimeSpan &lhs, unsigned rhs);
442
- /// �������� ��������� ������� �� ������� ������� �� �����
443
- CPLIB_API CDateTimeSpan operator %( const CDateTimeSpan &lhs, unsigned rhs);
444
-
445
- /// �������� ������� ������� �� ������
446
- CPLIB_API unsigned operator / ( const CDateTimeSpan &lhs, const CDateTimeSpan &rhs );
447
- /// �������� ��������� ������� �� ������� ������� �� ������
448
- CPLIB_API CDateTimeSpan operator % ( const CDateTimeSpan &lhs, const CDateTimeSpan &rhs );
449
-
450
- /**
451
- * \brief �������� ��������� ������� �� �������
452
- * \remark ������ ������� �� ����� ���� �������������. ���� � ����������
453
- * ��������� ���������� ������������� ������, ������������ ����������.
454
- */
455
- CPLIB_API CDateTimeSpan operator -( const CDateTimeSpan &lhs, const CDateTimeSpan &rhs);
456
- /**
457
- * \brief �������� ��������� ������� �� �������
458
- * \remark ������ ������� �� ����� ���� �������������. ��� ���������
459
- * ����� �������� ������� ������� �� ����� ������� ������������ ����������
460
- */
461
- CPLIB_API CDateTimeSpan operator -( const CDateTime &lhs, const CDateTime &rhs);
462
- /// �������� ��������� ������� �� ����
463
- CPLIB_API CDateTime operator -( const CDateTime &lhs, const CDateTimeSpan &rhs);
464
-
465
- /// �������� ����������� ������� � �������
466
- CPLIB_API CDateTimeSpan operator +( const CDateTimeSpan &lhs, const CDateTimeSpan &rhs);
467
- /// �������� ����������� ������� �� �������
468
- CPLIB_API CDateTime operator +( const CDateTime &lhs, const CDateTimeSpan &rhs);
469
-
470
- /**
471
- * \brief ������� ����������� � ���� ��������� ������� �������
472
- *
473
- * \param intervalUnit [in] ������� ��������� � ������� ������� ��������, ��������
474
- * ��������� ����� ���� ������:
475
- * - "s" - �������;
476
- * - "n" - ������;
477
- * - "h" - ����;
478
- * - "d" - ���;
479
- * - "w" - ������;
480
- * - "m" - ������;
481
- * - "y" - ����.
482
- * \param interval [in] ������ ������������� ���������
483
- * \param value [in] ����, � ������� ������������ ��������
484
- *
485
- * \return ����� �������� ����.
486
- */
487
- CPLIB_API CDateTime DateAddA( const char* intervalUnit,
488
- int interval, const CDateTime& value);
489
-
490
- /**
491
- * \brief ������� ����������� � ���� ��������� ������� �������
492
- *
493
- * \param intervalUnit [in] ������� ��������� � ������� ������� ��������, ��������
494
- * ��������� ����� ���� ������:
495
- * - "s" - �������;
496
- * - "n" - ������;
497
- * - "h" - ����;
498
- * - "d" - ���;
499
- * - "w" - ������;
500
- * - "m" - ������;
501
- * - "y" - ����.
502
- * \param interval [in] ������ ������������� ���������
503
- * \param value [in] ����, � ������� ������������ ��������
504
- *
505
- * \return ����� �������� ����.
506
- */
507
- CPLIB_API CDateTime DateAddW( const wchar_t* intervalUnit,
508
- int interval, const CDateTime& value);
559
+ CPLIB_API CStringProxy toXsdDateTimeString(const CDateTime& dateTime);
509
560
 
510
561
  #ifdef UNICODE
511
562
  #define DateAdd DateAddW