2014-12-27 1 views
-2

Я только начал создавать грани габаритных часов, и я хочу сделать таймер обратного отсчета, который может подсчитать, сколько часов осталось в день, а затем перезапускается на 12 я каждый день.Пожалуйста, помогите новым для Pebble Smart кодирования часов попытайтесь преобразовать время в цифру

проблема заключается в том, что я не могу найти способ получить математику справа, чтобы отобразить: текущее время минус 24 часа, а затем показать его на часах (включая часы и минуты, такие как H: M).

// Time functions 
static void update_time() { 
    // Get a tm structure 
    time_t temp = time(NULL); 
    struct tm *tick_time = localtime(&temp); 
double munistime; 
    // Create a long-lived buffer 
    static char buffer[] = "00:00:00"; 

    // Write the current hours and minutes into the buffer 
    if(clock_is_24h_style() == true) { 
    // Use 24 hour format 
    strftime(buffer, sizeof("00:00:00"), "%H:%M:%S", tick_time); 
    munistime = 24.0 - 19.0; 

    } else { 
    // Use 12 hour format 
    strftime(buffer, sizeof("00:00:00"), "%I:%M:%S", tick_time); 
    } 

    // Display this time on the TextLayer 
    text_layer_set_text(s_time_layer, buffer); 
} 

static void tick_handler(struct tm *tick_time, TimeUnits units_changed) { 
update_time(); 
} 
// Set the count from the start of the day 
Static void update_countdown() { 


} 

    // Window Functions 
    static void main_window_load(Window *window) { 
    // Create time TextLayer 
    s_time_layer = text_layer_create(GRect(0, 130, 150,50)); 
    text_layer_set_background_color(s_time_layer, GColorClear); 
    text_layer_set_text_color(s_time_layer, GColorBlack); 
    text_layer_set_text(s_time_layer, "00:00:00"); 
    // Improve the layout to be more like a watchface 
    text_layer_set_font(s_time_layer, fonts_get_system_font(FONT_KEY_BITHAM_30_BLACK)); 
    text_layer_set_text_alignment(s_time_layer, GTextAlignmentCenter); 


    // Creates A count Timer Layer 
    s_countdown_layer = text_layer_create(GRect(0, 40, 150, 50)); 
    text_layer_set_background_color(s_countdown_layer, GColorBlack); 
    text_layer_set_text_color(s_countdown_layer, GColorWhite); 
    text_layer_set_text(s_countdown_layer, "00:00:00"); 
    text_layer_set_text_alignment(s_countdown_layer, GTextAlignmentCenter); 
    text_layer_set_font(s_countdown_layer,fonts_get_system_font(FONT_KEY_GOTHIC_28)); 


    // Add it as a child layer to the Window's root layer 
    layer_add_child(window_get_root_layer(window), text_layer_get_layer(s_time_layer)); 
    layer_add_child(window_get_root_layer(window),text_layer_get_layer(s_countdown_layer)); 
    update_time(); 
} 
+0

Вы действительно не задавали вопрос. В чем именно проблема? – Chris

+0

Как вычесть текущее время с 24 и отобразить в формате% h:% m:% s на гальке? –

ответ

0

Я бы получил tick_time в 3 переменных - в течение нескольких часов, минут и секунд. Вычислите новые значения для них, а затем сохраните их в буфере для отображения.

0

Это не плохо, если вы просто конвертировать время в секундах, и вычесть из 24 часов:

time_t temp = time(NULL); 
struct tm *tick_time = localtime(&temp); 
static char buffer[] = "00:00:00"; 

// 86400 = 24 hours * 60 minutes * 60 seconds 
// this gets the total number of seconds remaining before midnight 
int secsUntilMidnight = 86400 - (tick_time->tm_hour * 3600 + tick_time->tm_min * 60 + tick_time->tm_sec); 

Затем разделить значения снова:

int hr = secsUntilMidnight/3600; 
int mn = (secsUntilMidnight - (hr*3600))/60; 
int sc = (secsUntilMidnight - (hr*3600)) - (mn*60); 

sprintf (buffer, "%02d:%02d:%02d", hr, mn, sc); 

Вы могли бы сделать его более эффективным устанавливая secsUntilMidnight один раз в день, а затем просто вычитайте 1 секунду в вашем tickHandler, и вы также можете сделать математику для разделения значений более эффективной.

Смежные вопросы