|
|
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
Потребовалось переводить дату и время в формат Unix, и столкнулся с тем, что значения иногда округляются, т.е., получается ещё не наступившее время. Точный пример не помню, но, предположим, 00:01:59.997 (ч:м:с:мс) при переводе в Unix-время получалось 00:02:00.000. Функция DateTimeToUnix задана так: Код: pascal 1. 2. 3. 4. Заменил Round на Trunc, всё работало, однако столкнулся с обратным примером. Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. s='2016.01.04 00:02:00.000' dd=1451865719 , т.е., 2016.01.04 00:01:59 Значение d получено с помощью вышеуказаной функции (с заменой), где-то так: Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. Соответственно, вопрос: как избежать округления в большую сторону в случае 1, и в меньшую сторону в случае 2? Формат Unix нужен только для удобства расчёта в секундах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 07:49:06 |
|
||
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
if then else ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 09:47:02 |
|
||
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
Более того, даже при двух последовательных запусках может возвращаться разное значение. Код: pascal 1. 2. 3. Возвращает то 1451865719, то 1451865720. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 11:11:52 |
|
||
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
Код: pascal 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.06.2017, 15:05:18 |
|
||
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
Спасибо! А там, где у меня в примере "перевод в минуты" и "округление до периода, мин", там тоже нужно через SmartTrunc, или там уже ошибки не может быть? А то что-то уже не соображаю сегодня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2017, 00:32:52 |
|
||
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
user_a, Везде. Почитайте про хранение чисел с плавающей точкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2017, 15:57:20 |
|
||
|
DateTimeToUnix, округление
|
|||
|---|---|---|---|
|
#18+
user_aБолее того, даже при двух последовательных запусках может возвращаться разное значение. Код: pascal 1. 2. 3. Возвращает то 1451865719, то 1451865720.Сочувствую! автор Код: pascal 1. 2. s='2016.01.04 00:02:00.000'Берём счёты и проверяем: 0,0013888888861*86400=119,99999975904... [119] т.е. 00:01:59 ! Формат Unix TFileTime нужен . только для удобства расчёта в секундах пойдёт и TDateTime . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2017, 17:16:45 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=39464413&tid=2042198]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
182ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
2ms |
| others: | 190ms |
| total: | 479ms |

| 0 / 0 |
