![]() |
![]() |
|
Index
Source Files
Annotated Class List
Alphabetical Class List
Class Hierarchy
Graphical Class Hierarchy
|
||
![]() |
![]() |
#include <FieldConvertors.h>
Static Public Member Functions | |
| std::string | convert (const UtcTimeStamp &value, bool showMilliseconds=false) throw ( FieldConvertError ) |
| UtcTimeStamp | convert (const std::string &value, bool calculateDays=false) throw ( FieldConvertError ) |
Definition at line 365 of file FieldConvertors.h.
|
||||||||||||
|
Definition at line 400 of file FieldConvertors.h.
00403 {
00404 bool haveMilliseconds = false;
00405
00406 switch( value.size() )
00407 {
00408 case 21: haveMilliseconds = true;
00409 case 17: break;
00410 default: throw FieldConvertError();
00411 }
00412
00413 int i = 0;
00414 int c = 0;
00415 for( c = 0; c < 8; ++c )
00416 if( !isdigit(value[i++]) ) throw FieldConvertError();
00417 if (value[i++] != '-') throw FieldConvertError();
00418 for( c = 0; c < 2; ++c )
00419 if( !isdigit(value[i++]) ) throw FieldConvertError();
00420 if( value[i++] != ':' ) throw FieldConvertError();
00421 for( c = 0; c < 2; ++c )
00422 if( !isdigit(value[i++]) ) throw FieldConvertError();
00423 if( value[i++] != ':' ) throw FieldConvertError();
00424 for( c = 0; c < 2; ++c )
00425 if( !isdigit(value[i++]) ) throw FieldConvertError();
00426
00427 if( haveMilliseconds )
00428 {
00429 if( value[i++] != '.' ) throw FieldConvertError();
00430 for( c = 0; c < 3; ++c )
00431 if( !isdigit(value[i++]) ) throw FieldConvertError();
00432 }
00433
00434 int year, mon, mday, hour, min, sec, millis;
00435
00436 i = 0;
00437
00438 year = value[i++] - '0';
00439 year = 10 * year + value[i++] - '0';
00440 year = 10 * year + value[i++] - '0';
00441 year = 10 * year + value[i++] - '0';
00442
00443 mon = value[i++] - '0';
00444 mon = 10 * mon + value[i++] - '0';
00445 if( mon < 1 || 12 < mon ) throw FieldConvertError();
00446
00447 mday = value[i++] - '0';
00448 mday = 10 * mday + value[i++] - '0';
00449 if( mday < 1 || 31 < mday ) throw FieldConvertError();
00450
00451 ++i; // skip '-'
00452
00453 hour = value[i++] - '0';
00454 hour = 10 * hour + value[i++] - '0';
00455 // No check for >= 0 as no '-' are converted here
00456 if( 23 < hour ) throw FieldConvertError();
00457
00458 ++i; // skip ':'
00459
00460 min = value[i++] - '0';
00461 min = 10 * min + value[i++] - '0';
00462 // No check for >= 0 as no '-' are converted here
00463 if( 59 < min ) throw FieldConvertError();
00464
00465 ++i; // skip ':'
00466
00467 sec = value[i++] - '0';
00468 sec = 10 * sec + value[i++] - '0';
00469
00470 // No check for >= 0 as no '-' are converted here
00471 if( 60 < sec ) throw FieldConvertError();
00472
00473 if( haveMilliseconds )
00474 {
00475 millis = (100 * (value[i+1] - '0')
00476 + 10 * (value[i+2] - '0')
00477 + (value[i+3] - '0'));
00478 }
00479 else
00480 millis = 0;
00481
00482 return UtcTimeStamp (hour, min, sec, millis,
00483 mday, mon, year);
00484 }
|
|
||||||||||||
|
Definition at line 367 of file FieldConvertors.h. References FIX::integer_to_string_padded().
00370 {
00371 char result[ 18+4 ];
00372 int year, month, day, hour, minute, second, millis;
00373
00374 value.getYMD( year, month, day );
00375 value.getHMS( hour, minute, second, millis );
00376
00377 integer_to_string_padded( result, 5, year, 4, '0' );
00378 integer_to_string_padded( result + 4, 3, month, 2, '0' );
00379 integer_to_string_padded( result + 6, 3, day, 2, '0' );
00380 result[8] = '-';
00381 integer_to_string_padded( result + 9, 3, hour, 2, '0' );
00382 result[11] = ':';
00383 integer_to_string_padded( result + 12, 3, minute, 2, '0' );
00384 result[14] = ':';
00385 integer_to_string_padded( result + 15, 3, second, 2, '0' );
00386
00387 if( showMilliseconds )
00388 {
00389 result[17] = '.';
00390 if( integer_to_string_padded ( result + 18, 4, millis, 3, '0' )
00391 != result + 18 )
00392 {
00393 throw FieldConvertError();
00394 }
00395 }
00396
00397 return result;
00398 }
|
1.3.6-20040222 written by Dimitri van Heesch,
© 1997-2001