package com.vaadin.tests.application; import java.util.Arrays; import java.util.Date; import java.util.TimeZone; import com.vaadin.server.VaadinRequest; import com.vaadin.tests.components.AbstractReindeerTestUI; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Label; public class WebBrowserTimeZone extends AbstractReindeerTestUI { @Override protected void setup(VaadinRequest request) { final Label offsetLabel = addLabel("Browser offset"); final Label rawOffsetLabel = addLabel("Browser raw offset"); final Label dstDiffLabel = addLabel( "Difference between raw offset and DST"); final Label dstInEffectLabel = addLabel("Is DST currently active?"); final Label curDateLabel = addLabel("Current date in the browser"); final Label diffLabel = addLabel( "Browser to Europe/Helsinki offset difference"); final Label containsLabel = addLabel("Browser could be in Helsinki"); addButton("Get TimeZone from browser", new Button.ClickListener() { @Override public void buttonClick(ClickEvent event) { TimeZone hkiTZ = TimeZone.getTimeZone("Europe/Helsinki"); int hkiOffset = hkiTZ.getOffset(new Date().getTime()); int browserOffset = getBrowser().getTimezoneOffset(); int browserRawOffset = getBrowser().getRawTimezoneOffset(); String[] tzs = TimeZone.getAvailableIDs(browserRawOffset); boolean contains = Arrays.asList(tzs).contains(hkiTZ.getID()); offsetLabel.setValue(String.valueOf(browserOffset)); rawOffsetLabel.setValue(String.valueOf(browserRawOffset)); diffLabel.setValue(String.valueOf(browserOffset - hkiOffset)); containsLabel.setValue(contains ? "Yes" : "No"); dstDiffLabel .setValue(String.valueOf(getBrowser().getDSTSavings())); dstInEffectLabel .setValue(getBrowser().isDSTInEffect() ? "Yes" : "No"); curDateLabel.setValue(getBrowser().getCurrentDate().toString()); } }); } private Label addLabel(String caption) { final Label label = new Label("n/a"); label.setCaption(caption); addComponent(label); return label; } @Override protected String getTestDescription() { return "Verifies that browser TimeZone offset works - should be same as server in our case (NOTE assumes server+browser in same TZ)"; } @Override protected Integer getTicketNumber() { return 6691; } }