diff --git a/include/maskfld.cpp b/include/maskfld.cpp index ec5c0e064..5e22a86ba 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -160,7 +160,7 @@ bool TMask_field::ok() const // Certified 100% void TMask_field::parse_head(TScanner&) -{} +{} short TMask_field::dlg() const { @@ -2971,16 +2971,38 @@ const char* TDate_field::win2raw( if (s.not_empty()) { if (isdigit(s[0]) && s.len() < 10) - { - for (int meno = 2; meno <= 5 && meno < s.size(); meno += 3) - if (s[meno] != '-') - { - s.insert("-", meno); - } - if (s.len() == 8) // Fix century (for this millenium only) - { - s.insert("19", 6); + { + long d; + int m, y; + const int items = sscanf(s, "%ld-%d-%d", &d, &m, &y); + switch(items) + { + case 1: + d = atoi(s.left(2)); + m = atoi(s.mid(2, 2)); + y = atoi(s.mid(4)); + break; + case 2: + y = 0; + break; + case 3: + break; + default: + d = 0; + break; } + if (d > 0) + { + if (m <= 0 || y <= 0) + { + const TDate oggi(TODAY); + if (m <= 0) m = oggi.month(); + if (y <= 0) y = oggi.year(); + } + if (y < 100) + y += (y <= 10) ? 2000 : 1900; + s.format("%02d-%02d-%4d", int(d), m, y); + } } else {