2025-12-13 19:38 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* include/hbdate.h
* src/common/hbdate.c
* changed the following C functions:
HB_BOOL hb_timeStrGetUTC( const char * szTime,
int * piHour, int * piMinutes,
int * piSeconds,
int * piMSec, int * piUTCOffset );
HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
int * piYear, int * piMonth,
int * piDay, int * piHour,
int * piMinutes, int * piSeconds,
int * piMSec, int * piUTCOffset );
to
HB_BOOL hb_timeStrGetUTC( const char * szTime,
int * piHour, int * piMinutes,
int * piSeconds,
int * piMSec, int * piUTCOffset,
HB_BOOL * pfUTC );
HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
int * piYear, int * piMonth,
int * piDay, int * piHour,
int * piMinutes, int * piSeconds,
int * piMSec, int * piUTCOffset,
HB_BOOL * pfUTC );
Warning: incompatibility !!! New parameter HB_BOOL * pfUTC has been
added. These functions are used by Harbour internally but
if someone uses them in his code then he should add NULL
to passed parameters.
+ added new C function:
HB_BOOL hb_timeStampStrGetDTU( const char * szDateTime,
long * plJulian, long * plMilliSec,
HB_BOOL * pfUTC );
; the parameter pfUTC is used to retrieve information if time string
represents UTC time.
* src/rtl/dateshb.c
* added 2-nd parameter to hb_StrToTS() function which can be passed by
reference to retrieve information if time string represents UTC time.
Current syntax is:
hb_StrToTS( <cTimeStr> [, @<lUTC> ] ) -> <tTime>
This commit is contained in:
@@ -7,6 +7,48 @@
|
|||||||
Entries may not always be in chronological/commit order.
|
Entries may not always be in chronological/commit order.
|
||||||
See license at the end of file. */
|
See license at the end of file. */
|
||||||
|
|
||||||
|
2025-12-13 19:38 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||||
|
* include/hbdate.h
|
||||||
|
* src/common/hbdate.c
|
||||||
|
* changed the following C functions:
|
||||||
|
HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
||||||
|
int * piHour, int * piMinutes,
|
||||||
|
int * piSeconds,
|
||||||
|
int * piMSec, int * piUTCOffset );
|
||||||
|
HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
||||||
|
int * piYear, int * piMonth,
|
||||||
|
int * piDay, int * piHour,
|
||||||
|
int * piMinutes, int * piSeconds,
|
||||||
|
int * piMSec, int * piUTCOffset );
|
||||||
|
to
|
||||||
|
HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
||||||
|
int * piHour, int * piMinutes,
|
||||||
|
int * piSeconds,
|
||||||
|
int * piMSec, int * piUTCOffset,
|
||||||
|
HB_BOOL * pfUTC );
|
||||||
|
HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
||||||
|
int * piYear, int * piMonth,
|
||||||
|
int * piDay, int * piHour,
|
||||||
|
int * piMinutes, int * piSeconds,
|
||||||
|
int * piMSec, int * piUTCOffset,
|
||||||
|
HB_BOOL * pfUTC );
|
||||||
|
Warning: incompatibility !!! New parameter HB_BOOL * pfUTC has been
|
||||||
|
added. These functions are used by Harbour internally but
|
||||||
|
if someone uses them in his code then he should add NULL
|
||||||
|
to passed parameters.
|
||||||
|
+ added new C function:
|
||||||
|
HB_BOOL hb_timeStampStrGetDTU( const char * szDateTime,
|
||||||
|
long * plJulian, long * plMilliSec,
|
||||||
|
HB_BOOL * pfUTC );
|
||||||
|
; the parameter pfUTC is used to retrieve information if time string
|
||||||
|
represents UTC time.
|
||||||
|
|
||||||
|
* src/rtl/dateshb.c
|
||||||
|
* added 2-nd parameter to hb_StrToTS() function which can be passed by
|
||||||
|
reference to retrieve information if time string represents UTC time.
|
||||||
|
Current syntax is:
|
||||||
|
hb_StrToTS( <cTimeStr> [, @<lUTC> ] ) -> <tTime>
|
||||||
|
|
||||||
2025-12-12 04:09 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
2025-12-12 04:09 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
|
||||||
* include/harbour.hbx
|
* include/harbour.hbx
|
||||||
* src/harbour.def
|
* src/harbour.def
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ extern HB_EXPORT HB_BOOL hb_timeStrGet( const char * szTime,
|
|||||||
int * piSeconds, int * piMSec );
|
int * piSeconds, int * piMSec );
|
||||||
extern HB_EXPORT HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
extern HB_EXPORT HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
||||||
int * piHour, int * piMinutes, int * piSeconds,
|
int * piHour, int * piMinutes, int * piSeconds,
|
||||||
int * piMSec, int * piUTCOffset );
|
int * piMSec, int * piUTCOffset, HB_BOOL * pfUTC );
|
||||||
extern HB_EXPORT void hb_timeStrRawGet( const char * szTime,
|
extern HB_EXPORT void hb_timeStrRawGet( const char * szTime,
|
||||||
int * piHour, int * piMinutes,
|
int * piHour, int * piMinutes,
|
||||||
int * piSeconds, int * piMSec );
|
int * piSeconds, int * piMSec );
|
||||||
@@ -119,9 +119,11 @@ extern HB_EXPORT HB_BOOL hb_timeStampStrGet( const char * szDateTime,
|
|||||||
extern HB_EXPORT HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
extern HB_EXPORT HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
||||||
int * piYear, int * piMonth, int * piDay,
|
int * piYear, int * piMonth, int * piDay,
|
||||||
int * piHour, int * piMinutes, int * piSeconds,
|
int * piHour, int * piMinutes, int * piSeconds,
|
||||||
int * piMSec, int * piUTCOffset );
|
int * piMSec, int * piUTCOffset, HB_BOOL * pfUTC );
|
||||||
extern HB_EXPORT HB_BOOL hb_timeStampStrGetDT( const char * szDateTime,
|
extern HB_EXPORT HB_BOOL hb_timeStampStrGetDT( const char * szDateTime,
|
||||||
long * plJulian, long * plMilliSec );
|
long * plJulian, long * plMilliSec );
|
||||||
|
extern HB_EXPORT HB_BOOL hb_timeStampStrGetDTU( const char * szDateTime,
|
||||||
|
long * plJulian, long * plMilliSec, HB_BOOL * pfUTC );
|
||||||
|
|
||||||
extern HB_EXPORT double hb_timeStampPackDT( long lJulian, long lMilliSec );
|
extern HB_EXPORT double hb_timeStampPackDT( long lJulian, long lMilliSec );
|
||||||
extern HB_EXPORT void hb_timeStampUnpackDT( double dTimeStamp,
|
extern HB_EXPORT void hb_timeStampUnpackDT( double dTimeStamp,
|
||||||
|
|||||||
@@ -495,15 +495,16 @@ char * hb_timeStr( char * szTime, long lMilliSec )
|
|||||||
|
|
||||||
HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
||||||
int * piHour, int * piMinutes,
|
int * piHour, int * piMinutes,
|
||||||
int * piSeconds, int * piMSec, int * piUTCOffset )
|
int * piSeconds, int * piMSec,
|
||||||
|
int * piUTCOffset, HB_BOOL * pfUTC )
|
||||||
{
|
{
|
||||||
int iHour, iMinutes, iSeconds, iMSec, iUTCOffset, iBlocks;
|
int iHour, iMinutes, iSeconds, iMSec, iUTCOffset, iBlocks;
|
||||||
HB_BOOL fValid;
|
HB_BOOL fValid, fUTC;
|
||||||
|
|
||||||
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStrGetUTC(%s, %p, %p, %p, %p, %p)", szTime, ( void * ) piHour, ( void * ) piMinutes, ( void * ) piSeconds, ( void * ) piMSec, ( void * ) piUTCOffset ) );
|
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStrGetUTC(%s, %p, %p, %p, %p, %p, %p)", szTime, ( void * ) piHour, ( void * ) piMinutes, ( void * ) piSeconds, ( void * ) piMSec, ( void * ) piUTCOffset, ( void * ) pfUTC ) );
|
||||||
|
|
||||||
iHour = iMinutes = iSeconds = iMSec = iUTCOffset = iBlocks = 0;
|
iHour = iMinutes = iSeconds = iMSec = iUTCOffset = iBlocks = 0;
|
||||||
fValid = HB_FALSE;
|
fValid = fUTC = HB_FALSE;
|
||||||
|
|
||||||
if( szTime )
|
if( szTime )
|
||||||
{
|
{
|
||||||
@@ -549,7 +550,10 @@ HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if( iBlocks > 0 && ( szTime[ 0 ] == 'Z' || szTime[ 0 ] == 'z' ) )
|
if( iBlocks > 0 && ( szTime[ 0 ] == 'Z' || szTime[ 0 ] == 'z' ) )
|
||||||
|
{
|
||||||
|
fUTC = HB_TRUE;
|
||||||
++szTime;
|
++szTime;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
while( HB_ISSPACE( *szTime ) )
|
while( HB_ISSPACE( *szTime ) )
|
||||||
@@ -601,6 +605,7 @@ HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
|||||||
iUTCOffset *= 60;
|
iUTCOffset *= 60;
|
||||||
if( fMinus )
|
if( fMinus )
|
||||||
iUTCOffset = -iUTCOffset;
|
iUTCOffset = -iUTCOffset;
|
||||||
|
fUTC = HB_TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -611,7 +616,10 @@ HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
|||||||
iUTCOffset >= -43200 && iUTCOffset <= 43200 )
|
iUTCOffset >= -43200 && iUTCOffset <= 43200 )
|
||||||
fValid = HB_TRUE;
|
fValid = HB_TRUE;
|
||||||
else
|
else
|
||||||
iHour = iMinutes = iSeconds = iMSec = 0;
|
{
|
||||||
|
iHour = iMinutes = iSeconds = iMSec = iUTCOffset = 0;
|
||||||
|
fUTC = HB_FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -625,6 +633,8 @@ HB_BOOL hb_timeStrGetUTC( const char * szTime,
|
|||||||
*piMSec = iMSec;
|
*piMSec = iMSec;
|
||||||
if( piUTCOffset )
|
if( piUTCOffset )
|
||||||
*piUTCOffset = iUTCOffset;
|
*piUTCOffset = iUTCOffset;
|
||||||
|
if( pfUTC )
|
||||||
|
*pfUTC = fUTC;
|
||||||
|
|
||||||
return fValid;
|
return fValid;
|
||||||
}
|
}
|
||||||
@@ -636,7 +646,7 @@ HB_BOOL hb_timeStrGet( const char * szTime,
|
|||||||
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStrGet(%s, %p, %p, %p, %p)", szTime, ( void * ) piHour, ( void * ) piMinutes, ( void * ) piSeconds, ( void * ) piMSec ) );
|
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStrGet(%s, %p, %p, %p, %p)", szTime, ( void * ) piHour, ( void * ) piMinutes, ( void * ) piSeconds, ( void * ) piMSec ) );
|
||||||
|
|
||||||
return hb_timeStrGetUTC( szTime, piHour, piMinutes,
|
return hb_timeStrGetUTC( szTime, piHour, piMinutes,
|
||||||
piSeconds, piMSec, NULL );
|
piSeconds, piMSec, NULL, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
void hb_timeStrRawGet( const char * szTime,
|
void hb_timeStrRawGet( const char * szTime,
|
||||||
@@ -760,12 +770,12 @@ char * hb_timeStampStr( char * szDateTime, long lJulian, long lMilliSec )
|
|||||||
HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
||||||
int * piYear, int * piMonth, int * piDay,
|
int * piYear, int * piMonth, int * piDay,
|
||||||
int * piHour, int * piMinutes, int * piSeconds,
|
int * piHour, int * piMinutes, int * piSeconds,
|
||||||
int * piMSec, int * piUTCOffset )
|
int * piMSec, int * piUTCOffset, HB_BOOL * pfUTC )
|
||||||
{
|
{
|
||||||
int iYear, iMonth, iDay;
|
int iYear, iMonth, iDay;
|
||||||
HB_BOOL fValid;
|
HB_BOOL fValid;
|
||||||
|
|
||||||
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampStrGetUTC(%s, %p, %p, %p, %p, %p, %p, %p, %p)", szDateTime, ( void * ) piYear, ( void * ) piMonth, ( void * ) piDay, ( void * ) piHour, ( void * ) piMinutes, ( void * ) piSeconds, ( void * ) piMSec, ( void * ) piUTCOffset ) );
|
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampStrGetUTC(%s, %p, %p, %p, %p, %p, %p, %p, %p, %p)", szDateTime, ( void * ) piYear, ( void * ) piMonth, ( void * ) piDay, ( void * ) piHour, ( void * ) piMinutes, ( void * ) piSeconds, ( void * ) piMSec, ( void * ) piUTCOffset, ( void * ) pfUTC ) );
|
||||||
|
|
||||||
iYear = iMonth = iDay = 0;
|
iYear = iMonth = iDay = 0;
|
||||||
fValid = HB_FALSE;
|
fValid = HB_FALSE;
|
||||||
@@ -865,7 +875,7 @@ HB_BOOL hb_timeStampStrGetUTC( const char * szDateTime,
|
|||||||
( ! fValid && szDateTime ) )
|
( ! fValid && szDateTime ) )
|
||||||
{
|
{
|
||||||
if( hb_timeStrGetUTC( szDateTime, piHour, piMinutes, piSeconds,
|
if( hb_timeStrGetUTC( szDateTime, piHour, piMinutes, piSeconds,
|
||||||
piMSec, piUTCOffset ) )
|
piMSec, piUTCOffset, pfUTC ) )
|
||||||
fValid = HB_TRUE;
|
fValid = HB_TRUE;
|
||||||
else if( szDateTime )
|
else if( szDateTime )
|
||||||
fValid = HB_FALSE;
|
fValid = HB_FALSE;
|
||||||
@@ -892,24 +902,26 @@ HB_BOOL hb_timeStampStrGet( const char * szDateTime,
|
|||||||
|
|
||||||
return hb_timeStampStrGetUTC( szDateTime, piYear, piMonth, piDay,
|
return hb_timeStampStrGetUTC( szDateTime, piYear, piMonth, piDay,
|
||||||
piHour, piMinutes, piSeconds,
|
piHour, piMinutes, piSeconds,
|
||||||
piMSec, NULL );
|
piMSec, NULL, NULL );
|
||||||
}
|
}
|
||||||
|
|
||||||
HB_BOOL hb_timeStampStrGetDT( const char * szDateTime,
|
HB_BOOL hb_timeStampStrGetDTU( const char * szDateTime,
|
||||||
long * plJulian, long * plMilliSec )
|
long * plJulian, long * plMilliSec, HB_BOOL * pfUTC )
|
||||||
{
|
{
|
||||||
int iYear, iMonth, iDay, iHour, iMinutes, iSeconds, iMSec, iUTCOffset;
|
int iYear, iMonth, iDay, iHour, iMinutes, iSeconds, iMSec, iUTCOffset;
|
||||||
HB_BOOL fValid;
|
HB_BOOL fValid, fUTC;
|
||||||
|
|
||||||
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampStrGetDT(%s, %p, %p)", szDateTime, ( void * ) plJulian, ( void * ) plMilliSec ) );
|
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampStrGetDTU(%s, %p, %p, %p)", szDateTime, ( void * ) plJulian, ( void * ) plMilliSec, ( void * ) pfUTC ) );
|
||||||
|
|
||||||
fValid = hb_timeStampStrGetUTC( szDateTime, &iYear, &iMonth, &iDay,
|
fValid = hb_timeStampStrGetUTC( szDateTime, &iYear, &iMonth, &iDay,
|
||||||
&iHour, &iMinutes, &iSeconds, &iMSec,
|
&iHour, &iMinutes, &iSeconds, &iMSec,
|
||||||
&iUTCOffset );
|
&iUTCOffset, &fUTC );
|
||||||
if( plJulian )
|
if( plJulian )
|
||||||
*plJulian = hb_dateEncode( iYear, iMonth, iDay );
|
*plJulian = hb_dateEncode( iYear, iMonth, iDay );
|
||||||
if( plMilliSec )
|
if( plMilliSec )
|
||||||
*plMilliSec = hb_timeEncode( iHour, iMinutes, iSeconds, iMSec );
|
*plMilliSec = hb_timeEncode( iHour, iMinutes, iSeconds, iMSec );
|
||||||
|
if( pfUTC )
|
||||||
|
*pfUTC = fUTC;
|
||||||
|
|
||||||
if( iUTCOffset != 0 && fValid )
|
if( iUTCOffset != 0 && fValid )
|
||||||
{
|
{
|
||||||
@@ -930,6 +942,14 @@ HB_BOOL hb_timeStampStrGetDT( const char * szDateTime,
|
|||||||
return fValid;
|
return fValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HB_BOOL hb_timeStampStrGetDT( const char * szDateTime,
|
||||||
|
long * plJulian, long * plMilliSec )
|
||||||
|
{
|
||||||
|
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampStrGetDT(%s, %p, %p)", szDateTime, ( void * ) plJulian, ( void * ) plMilliSec ) );
|
||||||
|
|
||||||
|
return hb_timeStampStrGetDTU( szDateTime, plJulian, plMilliSec, NULL );
|
||||||
|
}
|
||||||
|
|
||||||
double hb_timeStampPackDT( long lJulian, long lMilliSec )
|
double hb_timeStampPackDT( long lJulian, long lMilliSec )
|
||||||
{
|
{
|
||||||
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampPackDT(%ld, %ld)", lJulian, lMilliSec ) );
|
HB_TRACE( HB_TR_DEBUG, ( "hb_timeStampPackDT(%ld, %ld)", lJulian, lMilliSec ) );
|
||||||
|
|||||||
@@ -559,9 +559,11 @@ HB_FUNC( HB_STRTOTS )
|
|||||||
if( szDateTime )
|
if( szDateTime )
|
||||||
{
|
{
|
||||||
long lDate, lTime;
|
long lDate, lTime;
|
||||||
|
HB_BOOL fUTC;
|
||||||
|
|
||||||
hb_timeStampStrGetDT( szDateTime, &lDate, &lTime );
|
hb_timeStampStrGetDTU( szDateTime, &lDate, &lTime, &fUTC );
|
||||||
hb_rettdt( lDate, lTime );
|
hb_rettdt( lDate, lTime );
|
||||||
|
hb_storl( fUTC, 2 );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
hb_errRT_BASE_SubstR( EG_ARG, 3012, NULL, HB_ERR_FUNCNAME, HB_ERR_ARGS_BASEPARAMS );
|
||||||
|
|||||||
Reference in New Issue
Block a user