794
gint zone1 = 0, zone2 = 0;
795
gchar offset_sign, zonestr[7];
799
result = sscanf(str, "%10s %d %9s %d %2d:%2d:%2d %5s",
801
result = sscanf(str, "%10s %d %9s %d %2d:%2d:%2d %6s",
800
802
weekday, day, month, year, hh, mm, ss, zone);
801
803
if (result == 8) return 0;
804
result = sscanf(str, "%3s,%d %9s %d %2d:%2d:%2d %5s",
806
result = sscanf(str, "%3s,%d %9s %d %2d:%2d:%2d %6s",
805
807
weekday, day, month, year, hh, mm, ss, zone);
806
808
if (result == 8) return 0;
808
result = sscanf(str, "%d %9s %d %2d:%2d:%2d %5s",
810
result = sscanf(str, "%d %9s %d %2d:%2d:%2d %6s",
809
811
day, month, year, hh, mm, ss, zone);
810
812
if (result == 7) return 0;
819
821
if (result == 6) return 0;
822
result = sscanf(str, "%10s %d %9s %d %2d:%2d %5s",
824
result = sscanf(str, "%10s %d %9s %d %2d:%2d %6s",
823
825
weekday, day, month, year, hh, mm, zone);
824
826
if (result == 7) return 0;
836
838
day, month, year, hh, mm);
837
839
if (result == 5) return 0;
841
result = sscanf(str, "%4d-%2d-%2d %2d:%2d:%2d+%2s:%2s",
842
year, &month_n, day, hh, mm, ss, zone1, zone2);
844
if (1 <= month_n && month_n <= 12) {
845
strncpy2(month, monthstr+((month_n-1)*3), 4);
847
strncpy2(zone+1, zone1, 3);
848
strncpy2(zone+3, zone2, 3);
843
/* RFC3339 subset, with fraction of second */
844
result = sscanf(str, "%4d-%2d-%2d%c%2d:%2d:%2d.%1d%6s",
845
year, &month_n, day, &sep1, hh, mm, ss, &secfract, zonestr);
846
debug_print("str |%s|, result %d\n", str, result);
848
&& (sep1 == 'T' || sep1 == 't' || sep1 == ' ')) {
849
if (month_n >= 1 && month_n <= 12) {
850
strncpy2(month, monthstr+((month_n-1)*3), 4);
851
if (zonestr[0] == 'z' || zonestr[0] == 'Z') {
852
strcat(zone, "+00:00");
853
} else if (sscanf(zonestr, "%c%2d:%2d",
854
&offset_sign, &zone1, &zone2) == 3) {
855
strcat(zone, zonestr);
861
/* RFC3339 subset, no fraction of second */
862
result = sscanf(str, "%4d-%2d-%2d%c%2d:%2d:%2d%6s",
863
year, &month_n, day, &sep1, hh, mm, ss, zonestr);
864
debug_print("str |%s|, result %d\n", str, result);
866
&& (sep1 == 'T' || sep1 == 't' || sep1 == ' ')) {
867
if (month_n >= 1 && month_n <= 12) {
868
strncpy2(month, monthstr+((month_n-1)*3), 4);
869
if (zonestr[0] == 'z' || zonestr[0] == 'Z') {
870
strcat(zone, "+00:00");
871
} else if (sscanf(zonestr, "%c%2d:%2d",
872
&offset_sign, &zone1, &zone2) == 3) {
873
strcat(zone, zonestr);
882
/* This particular "subset" is invalid, RFC requires the time offset */
856
883
result = sscanf(str, "%4d-%2d-%2d %2d:%2d:%2d",
857
884
year, &month_n, day, hh, mm, ss);
858
885
if (result == 6) {