|
32 | 32 |
|
33 | 33 | #include "sys-core.h"
|
34 | 34 |
|
| 35 | +static const REBI64 DAYS_OF_JAN_1ST_1970 = 719468; // number of days for 1st January 1970 |
| 36 | + |
35 | 37 |
|
36 | 38 | /***********************************************************************
|
37 | 39 | **
|
|
309 | 311 | }
|
310 | 312 |
|
311 | 313 |
|
| 314 | +/*********************************************************************** |
| 315 | +** |
| 316 | +*/ REBCNT Date_To_Timestamp(REBVAL *date) |
| 317 | +/* |
| 318 | +** Return the unix time stamp for a specific date value. |
| 319 | +** |
| 320 | +***********************************************************************/ |
| 321 | +{ |
| 322 | + REBDAT d = VAL_DATE(date); |
| 323 | + REBI64 epoch = (Days_Of_Date(d.date.day, d.date.month, d.date.year) - DAYS_OF_JAN_1ST_1970) * SECS_IN_DAY; |
| 324 | + return epoch + ((VAL_TIME(date) + 500000000) / SEC_SEC); |
| 325 | +} |
| 326 | + |
| 327 | +/*********************************************************************** |
| 328 | +** |
| 329 | +*/ void Timestamp_To_Date(REBVAL *date, REBI64 epoch) |
| 330 | +/* |
| 331 | +** Set Rebol date from the unix time stamp epoch. |
| 332 | +** |
| 333 | +***********************************************************************/ |
| 334 | +{ |
| 335 | + REBI64 days = (epoch / SECS_IN_DAY) + DAYS_OF_JAN_1ST_1970; |
| 336 | + |
| 337 | + VAL_SET(date, REB_DATE); |
| 338 | + Date_Of_Days(days, &VAL_DATE(date)); |
| 339 | + VAL_TIME(date) = TIME_SEC((epoch % 86400)); |
| 340 | + VAL_ZONE(date) = 0; |
| 341 | +} |
| 342 | + |
| 343 | + |
312 | 344 | /***********************************************************************
|
313 | 345 | **
|
314 | 346 | */ void Normalize_Time(REBI64 *sp, REBINT *dp)
|
|
883 | 915 | return R_RET;
|
884 | 916 | }
|
885 | 917 | }
|
| 918 | + else if (IS_INTEGER(arg)) { |
| 919 | + Timestamp_To_Date(D_RET, VAL_INT64(arg)); |
| 920 | + return R_RET; |
| 921 | + } |
886 | 922 | // else if (IS_NONE(arg)) {
|
887 | 923 | // secs = nsec = day = month = year = tz = 0;
|
888 | 924 | // goto fixTime;
|
|
0 commit comments