Functions in C to calculate hours, minutes, seconds from milliseconds input

Click For Summary

Discussion Overview

The discussion revolves around the implementation of three functions in C to extract hours, minutes, and seconds from a timestamp given in milliseconds. Participants are attempting to resolve issues related to incorrect hour calculations and the expected output format.

Discussion Character

  • Homework-related
  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant presents a code snippet for functions to calculate hours, minutes, and seconds but encounters an issue where the hour calculation returns 367 instead of the expected 07.
  • Another participant suggests that the hour should be in the range of 0 to 24, indicating a possible misunderstanding of the clock format being used.
  • A later reply mentions that the timestamp might be based on the Unix time system, which starts counting from a specific zero day, but this is not confirmed.
  • Additional examples are provided, with one participant noting that their code outputs 89 hours for a different timestamp, indicating further confusion in the calculations.
  • One participant calculates the hour manually and suggests taking the modulus of the hour by 24 to correct the output.

Areas of Agreement / Disagreement

Participants express differing views on the correct interpretation of the hour calculation, with no consensus on the proper approach to resolve the issue. Multiple competing ideas about the timestamp format and calculations remain unresolved.

Contextual Notes

There are limitations in the understanding of the timestamp's origin and the expected output format, which may affect the calculations. The discussions also highlight unresolved mathematical steps in the proposed solutions.

DiamondV
Messages
103
Reaction score
0

Homework Statement


Write three functions int get_hour(int timestamp), int get_min(int timestamp), int get_second(int timestamp) which will respectively return the hour of the day, the minute of the hour, and the second of the minute from a value given as parameter which is in milliseconds.
Example they give us is:
int timestamps = 1324561223; would output 07:56:01

The online system we use is basically where we write the actual function and the online compiler is coded to automatically run our code with predefined inputs that the compiler will insert as parameters into our code and print the result

Homework Equations

The Attempt at a Solution


Heres my code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int get_hour(int timestamp){
    int hour;
    hour = (timestamp/(1000*60*60));
    return hour;
}

int get_min(int timestamp){
    int min;
    min = ((timestamp%3600000)/60000);
    return min;
}

int get_second(int timestamp){
    int second;
    second = (((timestamp%3600000)%60000)/1000);
    return second;
}

I've been at this question for quite sometime. Theres something wrong with my hours. I keep getting this answer: 367:56:01 for int timestamps = 1324561223;
If you compare this with the example i said above, the minutes and seconds are correct, its something wrong with the hours and I have no idea why they are getting 07hrs. I googled it and even it said 367hrs. I thought maybe this has something to do with 24hrs in a day. 367/24 is 15 which is still not the right answer.

Why are my hours not right?
 
Last edited by a moderator:
Physics news on Phys.org
The problem statement says: "...return the hour of the day, the minute of the hour, and the second of the minute".

So the hour should be in the range 0..24. That's for a 24 hour clock. You might be dealing with a 12 hour clock where a.m. and p.m. hours are expected. Try that.
 
DiamondV said:

Homework Statement


Write three functions int get_hour(int timestamp), int get_min(int timestamp), int get_second(int timestamp) which will respectively return the hour of the day, the minute of the hour, and the second of the minute from a value given as parameter which is in milliseconds.
Example they give us is:
int timestamps = 1324561223; would output 07:56:01

The online system we use is basically where we write the actual function and the online compiler is coded to automatically run our code with predefined inputs that the compiler will insert as parameters into our code and print the result

Homework Equations

The Attempt at a Solution


Heres my code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int get_hour(int timestamp){
    int hour;
    hour = (timestamp/(1000*60*60));
    return hour;
}

int get_min(int timestamp){
    int min;
    min = ((timestamp%3600000)/60000);
    return min;
}

int get_second(int timestamp){
    int second;
    second = (((timestamp%3600000)%60000)/1000);
    return second;
}

I've been at this question for quite sometime. Theres something wrong with my hours. I keep getting this answer: 367:56:01 for int timestamps = 1324561223;
If you compare this with the example i said above, the minutes and seconds are correct, its something wrong with the hours and I have no idea why they are getting 07hrs. I googled it and even it said 367hrs. I thought maybe this has something to do with 24hrs in a day. 367/24 is 15 which is still not the right answer.

Why are my hours not right?
All timestamp schemes have a "zero day" from which time is counted. For example, the timestamp on Unix systems starts at 00:00:00 UTC on January 1, 1970. It's not clear if your timestamp is based on the Unix system or something else.

https://en.wikipedia.org/wiki/Unix_time
 
gneill said:
The problem statement says: "...return the hour of the day, the minute of the hour, and the second of the minute".

So the hour should be in the range 0..24. That's for a 24 hour clock. You might be dealing with a 12 hour clock where a.m. and p.m. hours are expected. Try that.

They also gave another example of
int timestamps = 321635432; with correct output being 17:20:35
So its definitely in 24hr clock.

For that input my code outputted: 89:20:35

I tried this code aswell, no luck

int get_hour(int timestamp){
int hour;
hour = timestamp/3600000;
return hour;
}

int get_min(int timestamp){
int min;
min = timestamp/60000;
return min;
}

int get_second(int timestamp){
int second;
second = timestamp/1000;
return second;
}
 
Going back to your first example and rendering it by hand:

##h = \left \lfloor {\frac{1324561223}{1000⋅60*60}} \right \rfloor = 367##

Now, 367/24 = 15 + 7/24. So it looks like you need to take the modulus of h/24.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 8 ·
Replies
8
Views
5K
  • · Replies 1 ·
Replies
1
Views
1K
  • · Replies 3 ·
Replies
3
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
1
Views
4K
  • · Replies 5 ·
Replies
5
Views
4K
  • · Replies 39 ·
2
Replies
39
Views
5K
  • · Replies 14 ·
Replies
14
Views
4K
  • · Replies 3 ·
Replies
3
Views
7K