add secondary replacement value 0 for date types (closes #1391)

This commit is contained in:
John
2024-12-31 18:23:55 +01:00
parent 3eb51e7cc8
commit edcb01955e
3 changed files with 11 additions and 3 deletions
+3 -3
View File
@@ -345,11 +345,11 @@ result_t DateTimeDataType::readSymbols(size_t offset, size_t length, const Symbo
} }
switch (type) { switch (type) {
case 2: // date only case 2: // date only
if (!hasFlag(REQ) && symbol == m_replacement) { if (!hasFlag(REQ) && (symbol == m_replacement || (!hasFlag(REZ) && symbol == 0))) {
if (i + 1 != length) { if (i + 1 != length) {
*output << NULL_VALUE << "."; *output << NULL_VALUE << ".";
break; break;
} else if (last == m_replacement) { } else if (last == m_replacement || (!hasFlag(REZ) && last == 0)) {
if (length == 2) { // number of days since 01.01.1900 if (length == 2) { // number of days since 01.01.1900
*output << NULL_VALUE << "."; *output << NULL_VALUE << ".";
} }
@@ -1228,7 +1228,7 @@ DataTypeList::DataTypeList() {
// date, 01.01.2000 - 31.12.2099 (0x01,0x01,0x00 - 0x1f,0x0c,0x63, replacement 0xff) // date, 01.01.2000 - 31.12.2099 (0x01,0x01,0x00 - 0x1f,0x0c,0x63, replacement 0xff)
add(new DateTimeDataType("HDA:3", 24, 0, 0xff, true, false, 0)); add(new DateTimeDataType("HDA:3", 24, 0, 0xff, true, false, 0));
// date, days since 01.01.1900, 01.01.1900 - 06.06.2079 (0x00,0x00 - 0xff,0xff) // date, days since 01.01.1900, 01.01.1900 - 06.06.2079 (0x00,0x00 - 0xff,0xff)
add(new DateTimeDataType("DAY", 16, 0, 0xff, true, false, 0)); add(new DateTimeDataType("DAY", 16, REZ, 0xff, true, false, 0));
// date+time in minutes since 01.01.2009, 01.01.2009 - 31.12.2099 (0x00,0x00,0x00,0x00 - 0x02,0xda,0x4e,0x1f) // date+time in minutes since 01.01.2009, 01.01.2009 - 31.12.2099 (0x00,0x00,0x00,0x00 - 0x02,0xda,0x4e,0x1f)
add(new DateTimeDataType("DTM", 32, REQ, 0x100, true, true, 0)); add(new DateTimeDataType("DTM", 32, REQ, 0x100, true, true, 0));
// time in BCD, 00:00:00 - 23:59:59 (0x00,0x00,0x00 - 0x59,0x59,0x23) // time in BCD, 00:00:00 - 23:59:59 (0x00,0x00,0x00 - 0x59,0x59,0x23)
+3
View File
@@ -194,6 +194,9 @@ enum PartType {
/** bit flag for @a DataType: stored duplicate for backwards compatibility, not to be traversed in lists any more. */ /** bit flag for @a DataType: stored duplicate for backwards compatibility, not to be traversed in lists any more. */
#define DUP 0x2000 #define DUP 0x2000
/** bit flag for @a DataType: special marker for non-tolerated secondary replacement value of zero (date only). */
#define REZ 0x4000
/** /**
* Parse a float value from the 32 bit representation (IEEE 754). * Parse a float value from the 32 bit representation (IEEE 754).
* @param value the 32 bit representation of the float value. * @param value the 32 bit representation of the float value.
+5
View File
@@ -143,11 +143,13 @@ int main() {
{"x,,bda", "20.02.2021", "10fe07000420020621", "00", ""}, // Saturday {"x,,bda", "20.02.2021", "10fe07000420020621", "00", ""}, // Saturday
{"x,,bda", "31.12.2099", "10fe07000431120499", "00", ""}, // Thursday {"x,,bda", "31.12.2099", "10fe07000431120499", "00", ""}, // Thursday
{"x,,bda", "-.-.-", "10fe070004ffff00ff", "00", ""}, {"x,,bda", "-.-.-", "10fe070004ffff00ff", "00", ""},
{"x,,bda", "-.-.-", "10fe07000400000000", "00", "W"},
{"x,,bda", "", "10fe07000432100014", "00", "rw"}, {"x,,bda", "", "10fe07000432100014", "00", "rw"},
{"x,,bda:3", "26.10.2014", "10fe070003261014", "00", ""}, {"x,,bda:3", "26.10.2014", "10fe070003261014", "00", ""},
{"x,,bda:3", "01.01.2000", "10fe070003010100", "00", ""}, {"x,,bda:3", "01.01.2000", "10fe070003010100", "00", ""},
{"x,,bda:3", "31.12.2099", "10fe070003311299", "00", ""}, {"x,,bda:3", "31.12.2099", "10fe070003311299", "00", ""},
{"x,,bda:3", "-.-.-", "10fe070003ffffff", "00", ""}, {"x,,bda:3", "-.-.-", "10fe070003ffffff", "00", ""},
{"x,,bda:3", "-.-.-", "10fe070003000000", "00", "W"},
{"x,,bda:3", "", "10fe070003321299", "00", "rw"}, {"x,,bda:3", "", "10fe070003321299", "00", "rw"},
{"x,,bda,2", "", "", "", "c"}, {"x,,bda,2", "", "", "", "c"},
{"x,,bdz", "26.10.2014", "10fe07000426100614", "00", ""}, // Sunday {"x,,bdz", "26.10.2014", "10fe07000426100614", "00", ""}, // Sunday
@@ -155,16 +157,19 @@ int main() {
{"x,,bdz", "20.02.2021", "10fe07000420020521", "00", ""}, // Saturday {"x,,bdz", "20.02.2021", "10fe07000420020521", "00", ""}, // Saturday
{"x,,bdz", "31.12.2099", "10fe07000431120399", "00", ""}, // Thursday {"x,,bdz", "31.12.2099", "10fe07000431120399", "00", ""}, // Thursday
{"x,,bdz", "-.-.-", "10fe070004ffff00ff", "00", ""}, {"x,,bdz", "-.-.-", "10fe070004ffff00ff", "00", ""},
{"x,,bdz", "-.-.-", "10fe07000400000000", "00", "W"},
{"x,,bdz", "", "10fe07000432100014", "00", "rw"}, {"x,,bdz", "", "10fe07000432100014", "00", "rw"},
{"x,,hda", "26.10.2014", "10fe0700041a0a070e", "00", ""}, // Sunday {"x,,hda", "26.10.2014", "10fe0700041a0a070e", "00", ""}, // Sunday
{"x,,hda", "01.01.2000", "10fe07000401010600", "00", ""}, // Saturday {"x,,hda", "01.01.2000", "10fe07000401010600", "00", ""}, // Saturday
{"x,,hda", "31.12.2099", "10fe0700041f0c0463", "00", ""}, // Thursday {"x,,hda", "31.12.2099", "10fe0700041f0c0463", "00", ""}, // Thursday
{"x,,hda", "-.-.-", "10fe070004ffff00ff", "00", ""}, {"x,,hda", "-.-.-", "10fe070004ffff00ff", "00", ""},
{"x,,hda", "-.-.-", "10fe07000400000000", "00", "W"},
{"x,,hda", "", "10fe070004200c0463", "00", "rw"}, {"x,,hda", "", "10fe070004200c0463", "00", "rw"},
{"x,,hda:3", "26.10.2014", "10fe0700031a0a0e", "00", ""}, {"x,,hda:3", "26.10.2014", "10fe0700031a0a0e", "00", ""},
{"x,,hda:3", "01.01.2000", "10fe070003010100", "00", ""}, {"x,,hda:3", "01.01.2000", "10fe070003010100", "00", ""},
{"x,,hda:3", "31.12.2099", "10fe0700031f0c63", "00", ""}, {"x,,hda:3", "31.12.2099", "10fe0700031f0c63", "00", ""},
{"x,,hda:3", "-.-.-", "10fe070003ffffff", "00", ""}, {"x,,hda:3", "-.-.-", "10fe070003ffffff", "00", ""},
{"x,,hda:3", "-.-.-", "10fe070003000000", "00", "W"},
{"x,,hda:3", "", "10fe070003200c63", "00", "rw"}, {"x,,hda:3", "", "10fe070003200c63", "00", "rw"},
{"x,,hda,2", "", "", "", "c"}, {"x,,hda,2", "", "", "", "c"},
{"x,,day", "26.10.2014", "10fe070002d0a3", "00", ""}, {"x,,day", "26.10.2014", "10fe070002d0a3", "00", ""},