public: add parsing build date from ISO-8601 alike format

This commit is contained in:
Alibek Omarov 2025-02-07 17:47:23 +03:00
parent 151e7fe37b
commit 8f257cc331
3 changed files with 33 additions and 3 deletions

View file

@ -13,6 +13,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
*/
#include <stdio.h>
#include "crtlib.h"
#include "buildenums.h"
@ -38,9 +39,31 @@ int Q_buildnum_date( const char *date )
b = d + (int)((y - 1) * 365.25f );
if((( y % 4 ) == 0 ) && m > 1 )
{
b += 1;
}
b -= 41728; // Apr 1 2015
return b;
}
int Q_buildnum_iso( const char *date )
{
int y, m, d, b, i;
if( sscanf( date, "%d-%d-%d", &y, &m, &d ) != 3 || y <= 1900 || m <= 0 || d <= 0 )
return -1;
// fixup day and month
m--;
d--;
for( i = 0; i < m; i++ )
d += mond[i];
y -= 1900;
b = d + (int)((y - 1) * 365.25f );
if((( y % 4 ) == 0 ) && m > 1 )
b += 1;
b -= 41728; // Apr 1 2015
return b;

View file

@ -57,6 +57,7 @@ enum
//
int Q_buildnum( void );
int Q_buildnum_date( const char *date );
int Q_buildnum_iso( const char *date );
int Q_buildnum_compat( void );
const char *Q_PlatformStringByID( const int platform );
const char *Q_buildos( void );

View file

@ -180,8 +180,14 @@ int main( void )
if( Q_buildnum_date( "Apr 02 2015" ) != 1 )
return 201;
if( Q_buildnum_date( "Apr 17 2023" ) != 2938 )
if( Q_buildnum_date( "Apr 02 2015" ) != Q_buildnum_iso( "2015-04-02 21:19:10 +0300" ))
return 202;
if( Q_buildnum_date( "Apr 17 2023" ) != 2938 )
return 203;
if( Q_buildnum_date( "Apr 17 2023" ) != Q_buildnum_iso( "2023-04-17 21:19:10 +0300" ))
return 204;
return EXIT_SUCCESS;
}