Why do Explorer and the command prompt interpret file times differently?
A customer observed that if they use Explorer to view the timestamp on a file, it is not always in agreement with the value shown if they run a plain
DIR in a command prompt. They are sometimes off by an hour. Why is that?
Whenever you hear the phrase “off by an hour” you should immediately think “Daylight Saving Time”.
The formatting of file timestamps shown by Explorer has changed over time. The most recent algorithm (at the time of this writing) is to use the time zone that was in effect at your current location at the time the timestamp was created. For example, a file created at noon in June 22 will show its timestamp as noon, even if you view it in the middle of December. That’s because Explorer says, “Well, on June 22, Daylight Saving Time was not in effect, even though it’s in effect now, so I will interpret that time zone as if Daylight Saving Time were not active.” (Hey, Raymond, didn’t you get that backward? Answer: The customer who asked this question is in New Zealand.)¹
The old-style function for converting a UTC timestamp into a local timestmap is
FileTimeToLocalFileTime. The documentation for that function points you at the sequence of operations you need to perform if you want to use the time zone of the timestamp instead of the current time zone.
Explorer switched to using the time zone of the timestamp, but the command processor continues using the old-style conversion.
Why doesn’t the command processor get with the program?
Well, for one thing, the people who decide what Explorer does are not the same people who decide what the command processor does. (The Explorer folks can certainly make suggestions, but they can’t force the command processor to do anything.) It’s like asking why Taco Bell puts the men’s room on the left, but Pizza Hut puts it on the right.
The command processor is an old and cranky program. The command processor yells at Explorer to get off his lawn. The command processor gets upset when his Internet connection flakes out while he’s watching Matlock online. The command processor doesn’t care about your fancy-pants localized file names; it shows the raw file system names. The command processor has hundreds of thousands of scripts, and there’s no way of knowing how many of them depend on the exact way it formats dates.
You may be able to wheedle the command processor into making some changes for you, but you’d better have a really good reason, and he’s going to be really grumpy about it. The command processor was once cajoled into changing its date format to four-digit years back in the late 20th century, and he did it only because everybody insisted that it was soooooooo important. But he was so grumpy about it, he had an option to go back.
¹ Actually, that’s not true. The customer who asked the question was in Texas, but I moved him to New Zealand for the purpose of the story. People in the Southern Hemisphere always have to put up with us Northerners assuming that summer starts in June, so I figured I’d turn the tables for once.