TDateTime::TDateTime(const char* src, TDateTimeFlag flag)
{
	unsigned  int year = 0;
	unsigned  int month = 0;
	unsigned  int day = 0;
	unsigned  int hour = 0;
	unsigned  int min = 0;
	unsigned  int sec = 0;
 
	int result=0;
	Val = 0;

	if(flag == DATE_POS)
	{
		result=DecodeDateString(src,year,month,day);
		if(result == 0 )
		{
			Val = INVALID_DATE_VALUE;
		}
		else
		{
			Val = ComposeDate(year, month, day);
		}
	}
	else if(flag == TIME_POS )
	{
		result=DecodeTimeString(src,hour,min,sec);
		if(result == 0 )
		{
			Val = INVALID_DATE_VALUE;
		}
		else
		{
			Val = ComposeTime(hour, min, sec);
		}
	}
	else if(flag == DATETIME_POS )
	{
		result=DecodeDateTimeString(src,year,month,day,hour,min,sec);
		if(result == 0 )
		{
			Val = INVALID_DATE_VALUE;
		}
		else
		{
			Val = ComposeDate(year, month, day);
			Val += ComposeTime(hour, min, sec);
		}
	}
 

}
int TDateTime::DecodeDateTimeString(const char *src,
				    unsigned  int &year,
				    unsigned  int &month,
				    unsigned  int &day,
				    unsigned  int &hour,
				    unsigned  int &min,
				    unsigned  int &sec)
{

	if(strlen(src) < 14 )
	{
		return 0;
	}
	int offset=DecodeDateString(src,year,month,day);
	if(offset == 0 )
	{
		return 0;
	}
	return DecodeTimeString(src+offset,hour,min,sec);

}
Example #3
0
/*
 Returns an error if there was something wrong with the optional item or it couldn't
 be handled.
 */
static QCBORError GetNext_TaggedItem(QCBORDecodeContext *me, QCBORItem *pDecodedItem, QCBORTagListOut *pTags)
{
   // Stack usage: int/ptr: 3 -- 24
   QCBORError nReturn;
   uint64_t  uTagBits = 0;
   if(pTags) {
      pTags->uNumUsed = 0;
   }

   for(;;) {
      nReturn = GetNext_FullItem(me, pDecodedItem);
      if(nReturn) {
         goto Done; // Error out of the loop
      }

      if(pDecodedItem->uDataType != QCBOR_TYPE_OPTTAG) {
         // Successful exit from loop; maybe got some tags, maybe not
         pDecodedItem->uTagBits = uTagBits;
         break;
      }

      uint8_t uTagBitIndex;
      // Tag was mapped, tag was not mapped, error with tag list
      switch(TagMapper_Lookup(me->pCallerConfiguredTagList, pDecodedItem->val.uTagV, &uTagBitIndex)) {

         case QCBOR_SUCCESS:
            // Successfully mapped the tag
            uTagBits |= 0x01ULL << uTagBitIndex;
            break;

         case QCBOR_ERR_BAD_OPT_TAG:
            // Tag is not recognized. Do nothing
            break;

         default:
            // Error Condition
            goto Done;
      }

      if(pTags) {
         // Caller wants all tags recorded in the provided buffer
         if(pTags->uNumUsed >= pTags->uNumAllocated) {
            nReturn = QCBOR_ERR_TOO_MANY_TAGS;
            goto Done;
         }
         pTags->puTags[pTags->uNumUsed] = pDecodedItem->val.uTagV;
         pTags->uNumUsed++;
      }
   }

   switch(pDecodedItem->uTagBits & TAG_MAPPER_FIRST_FOUR) {
      case 0:
         // No tags at all or none we know about. Nothing to do.
         // This is part of the pass-through path of this function
         // that will mostly be taken when decoding any item.
         break;

      case QCBOR_TAGFLAG_DATE_STRING:
         nReturn = DecodeDateString(pDecodedItem);
         break;

      case QCBOR_TAGFLAG_DATE_EPOCH:
         nReturn = DecodeDateEpoch(pDecodedItem);
         break;

      case QCBOR_TAGFLAG_POS_BIGNUM:
      case QCBOR_TAGFLAG_NEG_BIGNUM:
         nReturn = DecodeBigNum(pDecodedItem);
         break;

      default:
         // Encountering some mixed up CBOR like something that
         // is tagged as both a string and integer date.
         nReturn = QCBOR_ERR_BAD_OPT_TAG;
   }

Done:
   return nReturn;
}