конвертировать дату Unix в 24-часовой формат ISO

Вы можете использовать numeric_limits<float>::quiet_NaN( ), определенные в стандартной библиотеке limits для тестирования. Для double существует отдельная константа.

#include <iostream>
#include <math.h>
#include <limits>

using namespace std;

int main( )
{
   cout << "The quiet NaN for type float is:  "
        << numeric_limits<float>::quiet_NaN( )
        << endl;

   float f_nan = numeric_limits<float>::quiet_NaN();

   if( isnan(f_nan) )
   {
       cout << "Float was Not a Number: " << f_nan << endl;
   }

   return 0;
}

Я не знаю, работает ли это на всех платформах, поскольку я тестировал только с g ++ в Linux.

0
задан a_horse_with_no_name 30 January 2019 в 10:31
поделиться

2 ответа

Вместо усечения даты вы хотите отформатировать дату. Вы должны быть в состоянии отформатировать время с помощью следующего запроса:

SELECT
    actor_id AS SRT_ID,
    shift_date,
    DATE_FORMAT(from_unixtime(shift_start), '%H:%i') AS login,
    DATE_FORMAT(from_unixtime(shift_end), '%H:%i')  AS logout
FROM
    fct_rep_schedule_details
WHERE
    ds BETWEEN '2018-12-01' AND '2019-01-15'
GROUP BY 1,2,3,4

где %H переводится в часы в 00 .. 23 и %i в минуты в соответствии с документацией prestoDB [ 113]

0
ответ дан Codeer 30 January 2019 в 10:31
поделиться

Вы не хотите урезать дату. Вы хотите извлечь час / время. Вы можете извлечь время, используя cast():

SELECT actor_id AS SRT_ID,
       shift_date,
       DATE_TRUNC('hour', from_unixtime(shift_start)) AS login,
       DATE_TRUNC('hour', from_unixtime(shift_end)) AS logout,
       CAST(from_unixtime(shift_start) as time) AS login_hh,
       CAST(from_unixtime(shift_end) as time) AS logout_hh,
FROM fct_rep_schedule_details
WHERE ds BETWEEN '2018-12-01' AND '2019-01-15';

Если вы хотите контролировать форматирование времени, используйте to_char():

SELECT actor_id AS SRT_ID,
       shift_date,
       DATE_TRUNC('hour', from_unixtime(shift_start)) AS login,
       DATE_TRUNC('hour', from_unixtime(shift_end)) AS logout,
       TO_CHAR(from_unixtime(shift_start), 'HH:MI') AS login_hh,
       TO_CHAR(from_unixtime(shift_end), 'HH:MI') AS logout_hh,
FROM fct_rep_schedule_details
WHERE ds BETWEEN '2018-12-01' AND '2019-01-15';
0
ответ дан Gordon Linoff 30 January 2019 в 10:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: