The first solution that pops into my mind is probing external sources. e.g. if you type
wmic timezone get StandardName
in a Windows command line you should get your timezone. Theoretically you could get the output by running this command in Java, as described in this thread.
P.S. It's probably not 'high-quality' to run an obscure command in Java and it's probably not the most efficient thing either. The idea is to somehow use another process that doesn't inherit JVM arguments or other 'customizations' (e.g. command line, Javascript, possibly other script languages, etc.)
Another possibility would be (depending on what client info you have available) to use Google's Time Zone API.
e.g. https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510×tamp=1331161200