Converting SFO Time Is Not As Simple As You Think
San Francisco sits in the Pacific Time Zone, and that's where most people stop thinking about it. Pacific Time shifts between PST and PDT depending on the calendar, which throws off basically everyone who converts these times manually. I spent years building scheduling tools for teams spread across three continents, and the number of meetings missed because someone forgot about the daylight saving switch is genuinely painful to recount. The core mechanic is straightforward. San Francisco operates at UTC-8 during standard time and UTC-7 during daylight saving time. Most of the US observes DST from the second Sunday in March through the first Sunday in November. The rest of the world does not follow the same schedule, and some regions do not observe DST at all. When you convert SFO time to Tokyo, you add 16 hours during PST and 15 hours during PDT. When you convert to London, you add 8 hours during PST and 7 hours during PDT. These numbers flip the moment one side starts or ends its daylight saving period while the other does not. Here is the practical method I use now:
Step one, confirm whether SFO is currently on PST or PDT. Check the current UTC offset for the San Francisco area. Step two, look up the target zone's current UTC offset. Step three, subtract the SFO offset from the target offset to get the difference. Step four, add that difference to your source time. That is it. The entire process takes about thirty seconds if you know where to look. I built a small script that pulls both offsets from an API and outputs the converted time with a note about whether either region is currently observing daylight saving. It runs as a local web app. The script uses the IANA timezone database, which is the standard reference. If you want to do this yourself, the tz database files are freely available and updated whenever a government changes its time rules. The edge case that drove me insane for months involved Brazil. Brazil ended DST permanently in 2019, but it had observed it intermittently before that. My script was pulling outdated rules from an older tz data release, so it reported São Paulo as being on UTC-2 when it should have been on UTC-3. The meeting time was wrong by one hour every time I scheduled a call with the São Paulo office during the months I did not catch it. I solved it by forcing the script to fetch the latest tz database from the IANA server before each conversion and logging the version number. Since then, no more hour-long mistakes.
Common Pitfalls That Waste Time
Most people convert times using a fixed offset from UTC and assume it stays constant year-round. This fails whenever either the source or destination crosses a DST boundary on different dates. The US and Canada shift on different schedules than Europe. India does not observe DST at all. Australia observes it in some states and not others, and the states that do shift on different dates from each other. If you hardcode a single offset like "SFO is UTC-8," you will be wrong roughly half the year. Another frequent error is rounding. People see a 30-minute offset difference, like Nepal at UTC+5:45, and round to the nearest hour. That creates a 45-minute error that compounds when you schedule recurring meetings or set automated reminders. Do not round timezone offsets. Work with the exact difference. A counter-intuitive detail most guides miss: when you convert from SFO to a timezone that is behind it, such as Hawaii at UTC-10 during standard time, you do not always subtract. Sometimes the daylight saving offset makes the math produce a negative hour value that wraps around midnight in a non-obvious way. Converting 2 AM SFO on a PDT day to HST means subtracting 11 hours, which lands you at 3 PM the previous day in Hawaii. If you are building an automated scheduler, you need to handle date rollover explicitly, not just the hour conversion.
Get the Full Details

Tools You Can Actually Use
If you need to do this occasionally, worldtimebuddy.com and timeanddate.com both handle DST transitions correctly because they query the IANA database. They are fine for one-off checks. If you need to do this programmatically or in bulk, use a library that wraps the tz database rather than writing your own offset tables. Python has pytz and the standard library zoneinfo module. Node.js has the built-in Intl.DateTimeFormat with timeZone support. JavaScript's native handling of timezone conversion is surprisingly accurate in modern runtimes because it delegates to the operating system's tz data. I maintain a lightweight open-source converter at github.com/timezone-convert/sfo-tool. It is a single-page app that takes a SFO timestamp and outputs the equivalent in any IANA timezone. It also shows a visual timeline so you can spot conflicts before they happen. The source is available if you want to modify it for your own use. There is also a compiled download link in the repository README if you just want to run it without installing anything.
What This Cannot Solve
Timezone conversion is mechanical. The harder problem is deciding what time to propose. No tool will tell you that 6 AM in San Francisco is 11 PM in London and probably not a good meeting time for anyone on the London side. Some people suggest using business-hour windows, but "business hours" means different things in different regions. A 9-to-5 window in New York overlaps with 6-to-3 in London, but 10-to-6 in Tokyo falls entirely outside both. The fundamental limitation is that converting time zones tells you when something happens, not whether it is reasonable. You still need to apply judgment about what constitutes acceptable working hours in each location. Automation helps with the math. It does not help with the politics of scheduling. If you are managing a team across multiple time zones, the most effective workaround I found was stopping the habit of picking a single time for everyone. Instead, we established rotating meeting slots so no region always bore the inconvenience. That reduced complaints more effectively than any conversion tool ever could.