void QDropboxJson::setTimestamp(QString key, QDateTime value) { QString valueToSave; valueToSave += translateDay(value.date().dayOfWeek()) + " "; valueToSave += QString::number(value.date().day()) + " "; valueToSave += translateMonth(value.date().month()) + " "; valueToSave += QString::number(value.date().year()) + " "; valueToSave += value.toString("hh:mm:ss"); if(valueMap.contains(key)){ *(valueMap[key].value.value) = valueToSave; }else{ qdropboxjson_entry e; QString *valuePointer = new QString(valueToSave); e.value.value = valuePointer; e.type = QDROPBOXJSON_TYPE_STR; valueMap[key] = e; } }
QDateTime QDropboxJson::getTimestamp(QString key, bool force) { if(!valueMap.contains(key)) return QDateTime(); qdropboxjson_entry e; e = valueMap.value(key); if(!force && e.type != QDROPBOXJSON_TYPE_STR) return QDateTime(); // Dropbox date time format "Sat, 21 Aug 2010 22:31:20 +0000" QString day = e.value.value->mid(1, 3); QString part1 = e.value.value->mid(6, 2); QString month = e.value.value->mid(9, 3); QString part2 = e.value.value->mid(13,13); month = translateMonth(month); day = translateDay(day); QString dval = QString("%1 %2 %3 %4").arg(day).arg(part1).arg(month).arg(part2); return QDateTime::fromString(dval, "ddd dd MMM yyyy hh:mm:ss"); }
RSSL_API RsslRet rsslDateTimeStringToDateTime(RsslDateTime *oDateTime, const RsslBuffer *iDateTimeString) { int hour = 0; int minute = 0; int second = 0; int millisecond = 0; int micro = 0; int nano = 0; int a, b, c; char monthStr[32]; char isoDate[9]; char isoTime[7]; char isoFractionalTime[10]; if (iDateTimeString->data == NULL || iDateTimeString->length == 0) { oDateTime->date.day = 0; oDateTime->date.month = 0; oDateTime->date.year = 0; oDateTime->time.hour = 255; oDateTime->time.minute = 255; oDateTime->time.second = 255; oDateTime->time.millisecond = 65535; oDateTime->time.microsecond = 2047; oDateTime->time.nanosecond = 2047; return RSSL_RET_BLANK_DATA; } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%2d:%2d:%2d.%9s", &a, &b, &c, &hour, &minute, &second, isoFractionalTime) == 7) { /* Read ISO 8601 datetime format yyyy-mm-ddThh:mm:ss.nnnnnnnnn e.g. 2017-08-12T23:20:50.550967845 Or digits < 9 after decimal */ oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; if( iso8601FractionalStringTimeToTime( &(oDateTime->time), isoFractionalTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%2d:%2d:%2d,%9s", &a, &b, &c, &hour, &minute, &second, isoFractionalTime) == 7) { /* Read ISO 8601 datetime format yyyy-mm-ddThh:mm:ss,nnnnnnnnn e.g 2017-08-12T23:20:50,550967845 Or digits < 9 after comma */ oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; if( iso8601FractionalStringTimeToTime( &(oDateTime->time), isoFractionalTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%2d:%2d:%2d", &a, &b, &c, &hour, &minute, &second ) == 6) { /* Read ISO 8601 datetime format yyyy-mm-ddThh:mm:ss e.g. 2017-08-12T23:20:50*/ oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; return RSSL_RET_SUCCESS; } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%2d:%2d", &a, &b, &c, &hour, &minute) == 5) { /* Read ISO 8601 datetime format yyyy-mm-ddThh:mm e.g. 2017-08-12T23:20*/ oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; return RSSL_RET_SUCCESS; } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%6s,%9s", &a, &b, &c, isoTime, isoFractionalTime) == 5) { /* Read ISO 8601 datetime format yyyy-mm-ddThhmmss,nnnnnnnnn e.g. 2017-08-12T232050,932123456 Or digits < 9 after comma */ oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; if( strlen(isoTime) == 6 && iso8601TimeStringToTime( &(oDateTime->time), isoTime) == RSSL_RET_SUCCESS) { if( iso8601FractionalStringTimeToTime( &(oDateTime->time), isoFractionalTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%6s.%9s", &a, &b, &c, isoTime, isoFractionalTime) == 5) { /* Read ISO 8601 datetime format yyyy-mm-ddThhmmss.nnnnnnnnn e.g. 2017-08-12T232050.932123456 Or digits < 9 after decimal*/ oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; if( strlen(isoTime) == 6 && iso8601TimeStringToTime( &(oDateTime->time), isoTime) == RSSL_RET_SUCCESS) { if( iso8601FractionalStringTimeToTime( &(oDateTime->time), isoFractionalTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } } if (sscanf(iDateTimeString->data, "%4d-%2d-%2dT%6s", &a, &b, &c, isoTime) == 4) { /* Read ISO 8601 datetime format yyyy-mm-ddThhmm e.g. 2017-08-12T2320 Or yyyy-mm-ddThhmmss e.g. 2017-08-12T232015 */ size_t tLen = strlen(isoTime); oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; if( (tLen== 4 || tLen == 6) && iso8601TimeStringToTime(&(oDateTime->time), isoTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } if (sscanf(iDateTimeString->data, "%8sT%6s,%9s", isoDate, isoTime, isoFractionalTime) == 3) { /* Read ISO 8601 datetime format yyyymmddThhmmss,nnnnnnnnn e.g 20071119T083748,550967845 Or digits < 9 after comma*/ if( iso8601DateStringToDate(&(oDateTime->date), isoDate) == RSSL_RET_SUCCESS ) { if( strlen(isoTime) == 6 && iso8601TimeStringToTime( &(oDateTime->time), isoTime) == RSSL_RET_SUCCESS) { if( iso8601FractionalStringTimeToTime( &(oDateTime->time), isoFractionalTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } } } if (sscanf(iDateTimeString->data, "%8sT%6s.%9s", isoDate, isoTime, isoFractionalTime) == 3) { /* Read ISO 8601 datetime format yyyymmddThhmmss.nnnnnnnnn e.g 20071119T083748.550967845 Or digits < 9 after decimal */ if( iso8601DateStringToDate(&(oDateTime->date), isoDate) == RSSL_RET_SUCCESS ) { if( strlen(isoTime) == 6 && iso8601TimeStringToTime( &(oDateTime->time), isoTime) == RSSL_RET_SUCCESS) { if( iso8601FractionalStringTimeToTime( &(oDateTime->time), isoFractionalTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } } } if (sscanf(iDateTimeString->data, "%8sT%6s", isoDate, isoTime) == 2) { /* Read ISO 8601 datetime format yyyymmddThhmmss e.g 20071119T083748 Or yyyymmddThhmm 20071119T0837 */ if( iso8601DateStringToDate(&(oDateTime->date), isoDate) == RSSL_RET_SUCCESS ) { size_t tLen = strlen(isoTime); if( (tLen== 4 || tLen == 6) && iso8601TimeStringToTime(&(oDateTime->time), isoTime) == RSSL_RET_SUCCESS) return RSSL_RET_SUCCESS; } } if (sscanf(iDateTimeString->data, "%d/%d/%d %d:%d:%d:%d:%d:%d", &a, &b, &c, &hour, &minute, &second, &millisecond, µ, & nano) >= 5) { // 1974/04/14 // if (a > 255) // assume year here is greater than MAX UINT8 { oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } // 04/14/74 // else if (c < 100) // assume year here is less than 100, then add 1900 { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c + 1900; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } // 04/14/1974 // else { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } return RSSL_RET_SUCCESS; } if (isdigit(iDateTimeString->data[3])) { if (sscanf(iDateTimeString->data, "%d %d %d %d %d %d %d %d %d", &a, &b, &c, &hour, &minute, &second, &millisecond, µ, &nano) >= 5) { if (a > 255) // assume year here is greater than MAX UINT8 { oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } else if (c < 100) // assume year here is less than 100, then add 1900 { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c + 1900; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } else { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } return RSSL_RET_SUCCESS; } } else if (isalpha(iDateTimeString->data[3])) { if (sscanf(iDateTimeString->data, "%d %3s %d %d %d %d %d %d %d", &a, monthStr, &c, &hour, &minute, &second, &millisecond, µ, &nano) >= 5) { if (c < 100) // assume year here is less than 100, then add 1900 { oDateTime->date.day = a; oDateTime->date.month = translateMonth(monthStr); oDateTime->date.year = c + 1900; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } else { oDateTime->date.day = a; oDateTime->date.month = translateMonth(monthStr); oDateTime->date.year = c; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } return RSSL_RET_SUCCESS; } } if (sscanf(iDateTimeString->data, "%d/%d/%d %d %d %d %d %d %d", &a, &b, &c, &hour, &minute, &second, &millisecond, µ, &nano) >= 5) { // 1974/04/14 // if (a > 255) // assume year here is greater than MAX UINT8 { oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } // 04/14/74 // else if (c < 100) // assume year here is less than 100, then add 1900 { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c + 1900; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } // 04/14/1974 // else { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } return RSSL_RET_SUCCESS; } if (isdigit(iDateTimeString->data[3])) { if (sscanf(iDateTimeString->data, "%d %d %d %d:%d:%d:%d:%d:%d", &a, &b, &c, &hour, &minute, &second, &millisecond, µ, &nano) >= 5) { if (a > 255) // assume year here is greater than MAX UINT8 { oDateTime->date.day = c; oDateTime->date.month = b; oDateTime->date.year = a; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } else if (c < 100) // assume year here is less than 100, then add 1900 { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c + 1900; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } else { oDateTime->date.day = b; oDateTime->date.month = a; oDateTime->date.year = c; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } return RSSL_RET_SUCCESS; } } else if (isalpha(iDateTimeString->data[3])) { if (sscanf(iDateTimeString->data, "%d %3s %d %d:%d:%d:%d:%d:%d", &a, monthStr, &c, &hour, &minute, &second, &millisecond, µ, &nano) >= 5) { if (c < 100) // assume year here is less than 100, then add 1900 { oDateTime->date.day = a; oDateTime->date.month = translateMonth(monthStr); oDateTime->date.year = c + 1900; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } else { oDateTime->date.day = a; oDateTime->date.month = translateMonth(monthStr); oDateTime->date.year = c; oDateTime->time.hour = hour; oDateTime->time.minute = minute; oDateTime->time.second = second; oDateTime->time.millisecond = millisecond; oDateTime->time.microsecond = micro; oDateTime->time.nanosecond = nano; } return RSSL_RET_SUCCESS; } } if (iDateTimeString->length > 0) { char* tmp = iDateTimeString->data; while (isspace(*tmp)) tmp++; /* skip whitespace */ /* if all whitespaces init to blank */ if (tmp == iDateTimeString->data + iDateTimeString->length) { oDateTime->date.day = 0; oDateTime->date.month = 0; oDateTime->date.year = 0; oDateTime->time.hour = 255; oDateTime->time.minute = 255; oDateTime->time.second = 255; oDateTime->time.millisecond = 65535; oDateTime->time.microsecond = 2047; oDateTime->time.nanosecond = 2047; return RSSL_RET_BLANK_DATA; } if (rwf_stodatetime(oDateTime, iDateTimeString->data) < 0) { return RSSL_RET_INVALID_DATA; } } return RSSL_RET_SUCCESS; }
void gettime() { read_rtc(); translateHour(); translateDay(); translateMonth(); }
RSSL_API RsslRet rsslDateStringToDate(RsslDate * oDate, const RsslBuffer * iDateString) { char * tmp; RsslUInt8 u8; RsslUInt16 u16; int a, b, c; char monthStr[32]; char isoDate[9]; if (iDateString->data == NULL || iDateString->length == 0) { oDate->day = 0; oDate->month = 0; oDate->year = 0; return RSSL_RET_BLANK_DATA; } if (sscanf(iDateString->data, "%4d-%2d-%2d", &a, &b, &c ) == 3) { /* Read ISO 8601 datetime format yyyy-mm-dd e.g. 2017-08-12 */ oDate->day = c; oDate->month = b; oDate->year = a; return RSSL_RET_SUCCESS; } if (sscanf(iDateString->data, "%4d-%2d", &a, &b ) == 2) { /* Read ISO 8601 datetime format yyyy-mm e.g. 2017-08 */ oDate->day = 0; oDate->month = b; oDate->year = a; return RSSL_RET_SUCCESS; } if (sscanf(iDateString->data, "--%2d-%2d", &b, &c ) == 2 || sscanf(iDateString->data, "--%2d%2d", &b, &c ) == 2) { /* Read ISO 8601 datetime format --mm-dd e.g. --03-31 */ oDate->year = 0; oDate->day = c; oDate->month = b; return RSSL_RET_SUCCESS; } if (sscanf(iDateString->data, "%8s", isoDate ) == 1) { /* Read ISO 8601 datetime format yyyymmdd e.g. 20170812 */ if( iso8601DateStringToDate(oDate, isoDate) == RSSL_RET_SUCCESS ) return RSSL_RET_SUCCESS; } if (sscanf(iDateString->data, "%d/%d/%d", &a, &b, &c) == 3) { // 1974/04/14 // if (a > 255) // assume year here is greater than MAX UINT8 { oDate->day = c; oDate->month = b; oDate->year = a; } // 04/14/74 // else if (c < 100) // assume year here is less than 100, then add 1900 { oDate->day = b; oDate->month = a; oDate->year = c + 1900; } // 04/14/1974 // else { oDate->day = b; oDate->month = a; oDate->year = c; } return RSSL_RET_SUCCESS; } if (sscanf(iDateString->data, "%d%d%d", &a, &b, &c) == 3) { if (a > 255) // assume year here is greater than MAX UINT { oDate->day = c; oDate->month = b; oDate->year = a; } else if (c < 100) // assume year here is less than 100, then add 1900 { oDate->day = b; oDate->month = a; oDate->year = c + 1900; } else { oDate->day = b; oDate->month = a; oDate->year = c; } return RSSL_RET_SUCCESS; } if (isdigit(iDateString->data[3])) { if (sscanf(iDateString->data, "%d %d %d", &a, &b, &c) == 3) { if (a > 255) // assume year here is greater than MAX UINT { oDate->day = c; oDate->month = b; oDate->year = a; } else if (c < 100) // assume year here is less than 100, then add 1900 { oDate->day = b; oDate->month = a; oDate->year = c + 1900; } else { oDate->day = b; oDate->month = a; oDate->year = c; } return RSSL_RET_SUCCESS; } } else if (isalpha(iDateString->data[3])) { if (sscanf(iDateString->data, "%d %3s %d", &a, monthStr, &c) == 3) { if (c < 100) // assume year here is less than 100, then add 1900 { oDate->day = a; oDate->month = translateMonth(monthStr); oDate->year = c + 1900; } else { oDate->day = a; oDate->month = translateMonth(monthStr); oDate->year = c; } return RSSL_RET_SUCCESS; } } if (iDateString->length > 0) { tmp = iDateString->data; for (u8 = 0; isdigit(*tmp); tmp++) u8 = u8 * 10 + (*tmp - '0'); oDate->day = u8; while (isspace(*tmp)) tmp++; /* skip whitespace */ if (tmp == iDateString->data + iDateString->length) { oDate->day = 0; oDate->month = 0; oDate->year = 0; return RSSL_RET_BLANK_DATA; } for (u8 = 1; u8 <= 12 && strncmp(months[u8-1], tmp, 3) ; u8++); if (u8 > 12) { return RSSL_RET_INVALID_DATA; } else oDate->month = u8; tmp += 3; tmp++; /* skip whitespace */ for (u16 = 0; isdigit(*tmp); tmp++) u16 = u16 * 10 + (*tmp - '0'); oDate->year = u16; } else { oDate->day = 0; oDate->month = 0; oDate->year = 0; return RSSL_RET_BLANK_DATA; } return RSSL_RET_SUCCESS; }