Sean is the undisputed timecode expert around here, so I should let him speak to the details, but my less expert explanation is that certain timecodes aren’t valid at all, and certain times are represented by a timecode that don’t look at all like the real time they mark.
For example, here are different conversions you can do on the timecode 1:00:00:00 @24 fps:
Preserving real time from zero: 1:00:00:00 @24 fps -> 3600 seconds -> 0:59:56:12 @29.97 non-drop
Preserving frame count from zero: 1:00:00:00 @24 fps -> 86400 frames -> 0:48:00:00 @29.97 non-drop