There are databases that can be used to
try to look that sort of thing up, but they won't always be right. I, for instance, have a phone number with a 612 area code (Minneapolis, Minnesota), but I live in Sweden. I have also been known on occasion to route my traffic through a US-based proxy so that IP-based geolocation will think I'm in the States.
Ask your users for their time zone. It's the only way to get reliable results.