1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.framework.util;
35
36 import info.magnolia.cms.security.MgnlUserManager;
37 import info.magnolia.cms.security.User;
38
39 import java.time.Instant;
40 import java.time.ZoneId;
41 import java.util.Date;
42 import java.util.Locale;
43 import java.util.Optional;
44 import java.util.TimeZone;
45
46 import org.apache.commons.lang3.StringUtils;
47
48
49
50
51 public final class TimezoneUtil {
52
53 public static Locale getUserLocale(User user) {
54 return Optional.ofNullable(user.getProperty(MgnlUserManager.PROPERTY_LANGUAGE))
55 .filter(StringUtils::isNotBlank)
56 .map(lang -> StringUtils.substringBefore(lang, "_"))
57 .map(Locale::new)
58 .orElse(Locale.getDefault());
59 }
60
61 public static ZoneId getUserZoneId(User user) {
62 return getTimezonePropertyValue(user)
63 .map(ZoneId::of)
64 .orElse(ZoneId.systemDefault());
65 }
66
67 public static TimeZone getUserTimezone(User user) {
68 return getTimezonePropertyValue(user)
69 .map(TimeZone::getTimeZone)
70 .orElse(TimeZone.getDefault());
71 }
72
73
74
75
76
77 public static String getTimeZoneInfo(User user, int style) {
78 return getUserTimezone(user).getDisplayName(isUsersZoneInDST(user), style, getUserLocale(user))
79 + " (" + getUserZoneId(user).getId() + ")";
80 }
81
82 private static Optional<String> getTimezonePropertyValue(User user) {
83 return Optional.ofNullable(user.getProperty(MgnlUserManager.PROPERTY_TIMEZONE))
84 .filter(StringUtils::isNotEmpty);
85 }
86
87 private static boolean isUsersZoneInDST(User user) {
88 return getUserTimezone(user).inDaylightTime(Date.from(Instant.now()));
89 }
90 }