Why does Windows keep your BIOS clock on local time?

Date:September 2, 2004 / year-entry #325
Tags:history
Orig Link:https://blogs.msdn.microsoft.com/oldnewthing/20040902-00/?p=37983
Comments:    44
Summary:Even though Windows NT uses UTC internally, the BIOS clock stays on local time. Why is that? There are a few reasons. One is a chain of backwards compatibility. In the early days, people often dual-booted between Windows NT and MS-DOS/Windows 3.1. MS-DOS and Windows 3.1 operate on local time, so Windows NT followed suit so that you wouldn't have...

Even though Windows NT uses UTC internally, the BIOS clock stays on local time. Why is that?

There are a few reasons. One is a chain of backwards compatibility.

In the early days, people often dual-booted between Windows NT and MS-DOS/Windows 3.1. MS-DOS and Windows 3.1 operate on local time, so Windows NT followed suit so that you wouldn't have to keep changing your clock each time you changed operating systems.

As people upgraded from Windows NT to Windows 2000 to Windows XP, this choice of time zone had to be preserved so that people could dual-boot between their previous operating system and the new operating system.

Another reason for keeping the BIOS clock on local time is to avoid confusing people who set their time via the BIOS itself. If you hit the magic key during the power-on self-test, the BIOS will go into its configuration mode, and one of the things you can configure here is the time. Imagine how confusing it would be if you set the time to 3pm, and then when you started Windows, the clock read 11am.

"Stupid computer. Why did it even ask me to change the time if it's going to screw it up and make me change it a second time?"

And if you explain to them, "No, you see, that time was UTC, not local time," the response is likely to be "What kind of totally propeller-headed nonsense is that? You're telling me that when the computer asks me what time it is, I have to tell it what time it is in London? (Except during the summer in the northern hemisphere, when I have to tell it what time it is in Reykjavik!?) Why do I have to remember my time zone and manually subtract four hours? Or is it five during the summer? Or maybe I have to add. Why do I even have to think about this? Stupid Microsoft. My watch says three o'clock. I type three o'clock. End of story."

(What's more, some BIOSes have alarm clocks built in, where you can program them to have the computer turn itself on at a particular time. Do you want to have to convert all those times to UTC each time you want to set a wake-up call?)


Comments (44)
  1. Wilhelm says:

    Is there any odd Windows behaviour that can’t be explained by "the users would complain if it were any other way" or "we would fix this except a million old apps depend on it to work like this (badly)"?

  2. SimonT says:

    Love it, best comment of the day "What kind of totally propeller-headed nonsense is that?"

  3. Scott says:

    This is chicken-and-egg, because the BIOS makers can’t switch to a sane UTC + timezone offset, because it would break Windows.

  4. Jerry Pisk says:

    I have to agree with Mo, obviously giving the user an option must be a reason for termination at Microsoft.

  5. Ben Cooke says:

    I think it could be argued that people who would be confused by a system clock in UTC shouldn’t be tinkering with the BIOS configuration. Most people don’t even know the BIOS configuration utility is there, let alone use it as the primary means to set the system time.

    I don’t see that it matters, really, though. It’s just a convention. Linux systems use a different convention, and that’s fine too. This isn’t a case where one is better than the other, this is just a design choice which has very little bearing on day-to-day operation of a computer.

    Since I’m in England, my Windows machine has the clock set to UTC for half the year anyway! ;)

  6. Mo says:

    It’s that ‘half a year’ that bugs me.

    The only time it ever causes problems is when daylight savings kicks in/out, but it’s enough to be an annoyance.

  7. Cooney says:

    "No, you see, that time was UTC, not local time," the response is likely to be "What kind of totally propeller-headed nonsense is that? You’re telling me that when the computer asks me what time it is, I have to tell it what time it is in London?

    No, just tell the computer where you are and what time it is there and it’ll figure it all out by its lonesome. Yeesh!

  8. Phil Rodgers says:

    There’s some impassioned commentary on this issue here: http://www.cl.cam.ac.uk/~mgk25/mswish/ut-rtc.html

  9. Tony Cox [MS] says:

    "I have to agree with Mo, obviously giving the user an option must be a reason for termination at Microsoft."

    Say it with me: "The art of design is the art of MAKING CHOICES."

    If you never make any choices and always give the user options, you’re not really doing your job as a designer. Sometimes the right choice is to let the user choose, but not always, and probably not even that often.

    Giving the user a choice about everything results in config dialogs from hell, where you can almost map out the arguments that were punted from design meetings by just counting the thousands of checkboxes. You also wind up with an infeasbily large test matrix.

  10. Raymond Chen says:

    Note that many BIOSes show the config dialog automatically if they detect a configuration problem.

    Sure the BIOS could store UTC + offset, but then you would have to remember to update your offset twice a year, or get the OS to update your time zone for you.

    This would require coordination between BIOS manufacturers and Windows (to detect a UTC+offset-enabled BIOS and use the offset). That nothing of the sort of has happened suggests that whenever there’s a meeting with BIOS designers, the subjects the BIOS manufacturers are much more interested in are things like Plug and Play and power management rather than improving the clock. And surveys for some reason don’t list "The RTC should be on UTC" as a top customer complaint.

    Engineering is about trade-offs. This is one of them.

  11. Jordan Russell says:

    In case you missed it, according to Phil Rodgers’ link Windows already has an option to run the RTC in UTC; it just has (or had?) a few bugs.

  12. I must be really dense, because i don’t see what’s so great about keeping the time in UTC. What are the advantages? It’s just as easy for the computer to keep (UTC + offset) as (local time – offset), but not for the user. So why not just use local time?

  13. Eric Hodel says:

    Computers are notorious at not keeping accurate time. Its why ntp exists. I’m surprised that Windows’ ntp setting is burried in some dark corner of the Control Panel, while MacOS has a friendly little checkbox that has it update the time automatically via ntp. (Google reveals that there’s some way to get an extra tab in the Date and Time Properties panel for WinXP.)

    If you have to change the clock on your computer and you have periodic access to the internet you’re doing something wrong.

  14. Eric Lippert says:

    Re: putting Daylight Savings Time rules into the BIOS — if DST rules were actually consistent, or even stable worldwide, you could chip them in. But they’re not. They change all the time as various legislatures in various countries change their minds about what the right DST rules are.

    Complexity of that nature is exactly the stuff that should go into the operating system.

  15. Ben Hutchings says:

    Raymond: You say that keeping the RTC set to local time is important for dual-booters. However, it seems to me that dual-booters are the ones who suffer most from this convention as each Windows installation adjusts the RTC the first time you run it after the beginning or end of DST.

  16. Ben Hutchings says:

    Christoffer: Read the page Phil Rodgers linked to.

  17. Eldo says:

    I guess, there should be only one 24 hour based time throughout the world.

    No US standard time or UK standard time. Just one time zone.

    We can find an island some where in the Pacific or Atlantic to start the time from there. People in that island would wake up at 6 hours WT (world time) and go to bed at 22 hours WT. We in America would wake up at say, 10 hours WT and go to bed at 2 hours WT.

    No daylight savings time either. DST is the stupidest thing human species has ever done to themselves; just a notch above religion.

  18. Ben Hutchings says:

    One might also ask why FileTimeToSystemTime produces incorrect results if DST was in effect at that time but not now, or vice versa. However, the answer is obvious: MS programmers prefer to be consistently wrong rather than correct, and besides, they can get wrong answers faster.

    Me, bitter? Not half as bitter as I’ll be when I actually have to bite the bullet and implement or integrate a working time zone system for Windows.

  19. mikeb says:

    Ben Hutchings: "each Windows installation adjusts the RTC the first time you run it after the beginning or end of DST"

    Ben, uncheck the "Automatically adjust clock for daylight saving changes" option on the Time Zone property page, and that installation of Windows will not muck with the clock when DST changes.

  20. Cooney says:

    One might also ask why FileTimeToSystemTime produces incorrect results if DST was in effect at that time but not now, or vice versa.

    I believe Raymond already did that. Short answer: probably don’t have sufficient info, and it would break things (as always).

  21. Ben Cooke says:

    Eldo,

    We don’t change society to suit computers, we build computers to suit society.

  22. Ben Cooke says:

    I also have this sudden urge to bitch about threadless discussion forums. :(

  23. Ben Hutchings says:

    mikeb: In Windows XP at least, that option doesn’t mean what it says. If you turn it off, it disables DST altogether. If you then set the time to the actual local time, the computer’s idea of UTC will be one hour out while DST is in effect locally.

  24. Chris Becke says:

    I really dont see the point. There are some small issues if a PC is booted up during the transition hour when the daylight savings switchover occours. Given that I live in a non daylight savings area, even that doesn’t bother me.

    The Microsoft solution seems the most logical and easy to understand (to a person who doesnt appreciate / fret with the various edge conditions it might fail in). Its good enough damnit. UTC in my bios? seems silly!

  25. Merle says:

    The daylight savings time adjustment really kills you if you’re dual booting. If you let the OS adjust for DST, both OSes will adjust it for you, forcing a manual fix. You can set just one of them to do the adjustment.. but who is to say that that is the OS you chose to boot first?

    Of course, with most computers networked (or connecting very frequently), just having good time services at ISPs (which are almost always a local call!) would suffice. The technology is ancient, we could do it.

  26. Mo says:

    An option (similar to the option most non-Windows operating systems that run on x86 have) along the lines of ‘Use UTC for hardware clock’ would be very useful for those people that still *do* dual-boot.

  27. Mildly Annoyed says:

    The issue of operating systems messing up the RTC after passing in/out of DST can get pretty bad in a multiboot environment. I once had a machine which quadruple-booted Win98, Win2k, Linux (not sure what distro) and FreeBSD. Three of the four operating systems took it upon themselves to adjust the RTC the first time they were booted after DST, without asking. The fourth detected the problem (thanks NTP!) and corrected the time, but failed to write it back to the RTC.

  28. josh says:

    Bah, UTC. The computer should keep time in TAI. While the system is off, the clock just ticks away, oblivious to leap seconds as well as time zone shifts.

    Using the local time seems to be the next best thing, IMO.

  29. Some might ask, "What exactly is the problem with the way it is now?" Consider that the operating system has to *actually adjust* the time for Daylight Savings rules. Other operating systems simply change their *interpretation* of their UTC BIOS time to match the daylight savings rules in effect for their configured time zones. When you change time zones, the clock isn’t touched. It’s simply reinterpreted.

    To build UTC offsets or time zone rules into the BIOS would add redundancy when the operating systems invariably do those things today.

    IMHO, the BIOS should add a note when users attempt to set the time indicating that some operating systems may wish this to be UTC. Windows could have a little "advanced" checkbox (or even just a registry setting), in turn, that indicates, "Hardware clock uses UTC." This needs to be a manual setting that defaults to off (even with new installations), specifically for the cases mentioned in other comments, at least until BIOS manufacturers decide to give this (minor) issue some attention. Start/stop timers and things like that really ought to be configured through a proper application, going through the operating system’s time zone handling, and not directly through the BIOS. With this "hardware clock uses UTC" setting enabled, the OS would stop adjusting the clock and would simply change its interpretation, like other UTC-based operating systems do today.

  30. Andrew Feldstein says:

    Don’t all of these arguments boil down to *my* keeping *my* BIOS clock on *my* time and Windows just taking it from there?

  31. Roland Kaufmann says:

    Local time is bad because it is neither continuously nor monotonously increasing. Period. Using it as your internally yardstick is equally stupid. Interestingly, NTFS keeps time in UTC, which indicates that at least someone around the block still had their senses.

    Second, hadn’t it been for the fact that timezone is implemented as a machine instead of a user property, there would have been no problems. Observe the problems that occurred before time zone redirection was implemented in Terminal Server (And why only there? Obviously the kernel now has the capability to keep a time zone per logon session).

    As for the backward compatibility argument: Who cared about the users who had RealTimeIsUniversal=1?Appearantly none, because it is still broken as of XPsp2, after umpteen years of complaining from users. Instead, users that mysteriously find it easier to set their clock in the BIOS than in the system notification area are catered to. Most end-users I know, are not even aware that there *is* a BIOS setup.

  32. Almost Anonymous says:

    Just last week I was reinstalling Debian and one of the setup questions was whether the BIOS time was UTC or local time.

    There was a bit of an explanation about the merits of each option (compatibily with Windows was cited). This is not the kind of option to present to regular users.

  33. AndyB says:

    Eldo, DST makes sense for a lot of reasons – of course it makes life difficult for a computer, but the world is designed around people, not for programmers workload.

    Using local time makes a lot of sense, for some logical propellor-head reason, a lot of software people would like to have it the other way round, but imagine if you have to figure out what the actual UTC time was. (Its ok for me, I live in the UK, but when I have to configure my web site on where the server is hosted… trial and error is usually employed).

    As for NTP settings: http://www.microsoft.com/windowsxp/home/using/productdoc/en/default.asp?url=/windowsxp/home/using/productdoc/en/windows_date_IT_overview.asp

  34. Ben Hutchings says:

    Almost Anonymous: Well, duh. Regular users don’t install operating systems.

  35. Mack says:

    Ah, the irony! We can’t have our BIOS clock in UTC because of users that dual-boot. So we have local time, which doesn’t work when people dual-boot.

  36. John says:

    For those that wanted to create one "world time" – Swatch already did, they called it Internet Time…

    http://www.swatch.com/internettime/home.php

    I even have a watch that shows internet time.

    They approached Windows team about supporting this as a standard time format. For those of you advocating options in dialog boxes, what’s one more?

  37. DS says:

    Local time in bios clock is very bad when you are dual-booting two windows version on the same box, and when you live in a country where you add +1hour in summer for energy saving.

    When the time=change comes, the first Windows change it (OK so far), then the othe one want to change it too, and then things are messed up.

    ‘confusing’ , maybe the first time, but really annoying.

  38. Miles Archer says:

    I want my computer to keep true local time. None of this time zone nonsense for me.

  39. James Mastros (theorbtwo) says:

    There are upsides and downsides to keeping time in GMT vs in localtime. (Purists will note that I’m misusing GMT. Purists can… er, nevermind.)

    In either case, converting from one to the other accurately means having an accurate idea of what timezone you’re in, and how that timezone functions. Unfornatly, that knowladge is never as good as it should be. It’s not determined by geography, it’s determined by politicions, and is subject to change without (much) notice. This means that you must plan for the information to be wrong from time to time, and that means the less you have to refer to that information, the better. So the question is, do you need the time more often in your local timezone, or in GMT? Yup, this is one thing that Windows does better then Unixen, at least for the average user.

    (Another thing that is starting to be done right is using NTP per default — though this is directly at odds with my other point, since using NTP and keeping the system clock in localtime means lots of conversions.)

  40. I recently bought a Mac Book Pro since I can now dual boot OS X and Windows XP. The only real issue that…

  41. A number of WinPE enthusiasts have expressed concern that Daylight Savings Time (DST) is not supported

  42. Is there any odd Windows behaviour that can’t be explained by "the users would complain if it were any other way" or "we would fix this except a million old apps depend on it to work like this (badly)"? En un comentario sobre la explicaci�n de porqu�

Comments are closed.


*DISCLAIMER: I DO NOT OWN THIS CONTENT. If you are the owner and would like it removed, please contact me. The content herein is an archived reproduction of entries from Raymond Chen's "Old New Thing" Blog (most recent link is here). It may have slight formatting modifications for consistency and to improve readability.

WHY DID I DUPLICATE THIS CONTENT HERE? Let me first say this site has never had anything to sell and has never shown ads of any kind. I have nothing monetarily to gain by duplicating content here. Because I had made my own local copy of this content throughout the years, for ease of using tools like grep, I decided to put it online after I discovered some of the original content previously and publicly available, had disappeared approximately early to mid 2019. At the same time, I present the content in an easily accessible theme-agnostic way.

The information provided by Raymond's blog is, for all practical purposes, more authoritative on Windows Development than Microsoft's own MSDN documentation and should be considered supplemental reading to that documentation. The wealth of missing details provided by this blog that Microsoft could not or did not document about Windows over the years is vital enough, many would agree an online "backup" of these details is a necessary endeavor. Specifics include:

<-- Back to Old New Thing Archive Index