diff options
author | Alexander Alexeev | 2016-12-07 18:53:37 +0700 |
---|---|---|
committer | Vitaly Takmazov | 2016-12-07 22:37:17 +0300 |
commit | bad2718b1b85d806221fce52c76fa1d388993396 (patch) | |
tree | 8788b2b128012c3688fe9d56f295039c8d86f7b3 /juick-core/src | |
parent | 3f0229dd0c0d07286604c77980ca578c1b3b8cbc (diff) |
singleton java 8 date formatters
Diffstat (limited to 'juick-core/src')
5 files changed, 132 insertions, 19 deletions
diff --git a/juick-core/src/main/java/com/juick/util/DateFormatter.java b/juick-core/src/main/java/com/juick/util/DateFormatter.java new file mode 100644 index 00000000..34585c63 --- /dev/null +++ b/juick-core/src/main/java/com/juick/util/DateFormatter.java @@ -0,0 +1,38 @@ +package com.juick.util; + +import org.apache.commons.lang3.StringUtils; + +import java.time.LocalDateTime; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.util.Date; + +/** + * Created by aalexeev on 12/7/16. + */ +public class DateFormatter { + private final DateTimeFormatter formatter; + + DateFormatter(String pattern) { + formatter = DateTimeFormatter.ofPattern(pattern); + } + + public String format(final Date date) { + if (date == null) + return null; + + LocalDateTime ldt = LocalDateTime.ofInstant(date.toInstant(), ZoneOffset.UTC); + + return ldt.format(formatter); + } + + + public Date parse(final String v) { + if (StringUtils.isBlank(v)) + return null; + + LocalDateTime ldt = LocalDateTime.parse(v, formatter); + + return Date.from(ldt.toInstant(ZoneOffset.UTC)); + } +} diff --git a/juick-core/src/main/java/com/juick/util/DateFormattersHolder.java b/juick-core/src/main/java/com/juick/util/DateFormattersHolder.java new file mode 100644 index 00000000..79414808 --- /dev/null +++ b/juick-core/src/main/java/com/juick/util/DateFormattersHolder.java @@ -0,0 +1,43 @@ +package com.juick.util; + +/** + * Created by aalexeev on 12/7/16. + */ +public class DateFormattersHolder { + + private DateFormattersHolder() { + throw new IllegalStateException(); + } + + private static volatile DateFormatter messageFormatter; + + public static DateFormatter getMessageFormatterInstance() { + DateFormatter localInstance = messageFormatter; + + if (localInstance == null) { + synchronized (DateFormatter.class) { + localInstance = messageFormatter; + + if (localInstance == null) + messageFormatter = localInstance = new DateFormatter("yyyy-MM-dd HH:mm:ss"); + } + } + return localInstance; + } + + private static volatile DateFormatter rssFormatter; + + public static DateFormatter getRssFormatterInstance() { + DateFormatter localInstance = rssFormatter; + + if (localInstance == null) { + synchronized (DateFormatter.class) { + localInstance = rssFormatter; + + if (localInstance == null) + rssFormatter = localInstance = new DateFormatter("EEE, d MMM yyyy HH:mm:ss"); + } + } + return localInstance; + } +} diff --git a/juick-core/src/main/java/com/juick/util/MessageUtils.java b/juick-core/src/main/java/com/juick/util/MessageUtils.java index 12ae71c1..96d650a8 100644 --- a/juick-core/src/main/java/com/juick/util/MessageUtils.java +++ b/juick-core/src/main/java/com/juick/util/MessageUtils.java @@ -24,6 +24,7 @@ public class MessageUtils { return result; } + private static Pattern regexLinks2 = Pattern.compile("((?<=\\s)|(?<=\\A))([\\[\\{]|<)((?:ht|f)tps?://(?:www\\.)?([^\\/\\s\\\"\\)\\!]+)/?(?:[^\\]\\}](?<!>))*)([\\]\\}]|>)"); public static String formatMessageCode(String msg) { @@ -48,6 +49,7 @@ public class MessageUtils { return "<pre>" + msg + "</pre>"; } + public static String formatMessage(String msg) { msg = msg.replaceAll("&", "&"); msg = msg.replaceAll("<", "<"); diff --git a/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java b/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java index 1093e47a..382db45a 100644 --- a/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java +++ b/juick-core/src/main/java/com/juick/xml/adapters/SimpleDateAdapter.java @@ -1,10 +1,9 @@ package com.juick.xml.adapters; -import java.text.SimpleDateFormat; -import java.util.Date; -import java.util.TimeZone; +import com.juick.util.DateFormattersHolder; import javax.xml.bind.annotation.adapters.XmlAdapter; +import java.util.Date; /** * Created by vitalyster on 15.11.2016. @@ -12,27 +11,13 @@ import javax.xml.bind.annotation.adapters.XmlAdapter; public class SimpleDateAdapter extends XmlAdapter<String, Date> { - private final SimpleDateFormat dateFormat; - public SimpleDateAdapter() { - dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); - } - @Override public String marshal(Date v) throws Exception { - if (v == null) { - return null; - } - synchronized (dateFormat) { - return dateFormat.format(v); - } + return DateFormattersHolder.getMessageFormatterInstance().format(v); } @Override public Date unmarshal(String v) throws Exception { - synchronized (dateFormat) { - return dateFormat.parse(v); - } + return DateFormattersHolder.getMessageFormatterInstance().parse(v); } - } diff --git a/juick-core/src/test/java/com/juick/FormatterTest.java b/juick-core/src/test/java/com/juick/FormatterTest.java new file mode 100644 index 00000000..d246c369 --- /dev/null +++ b/juick-core/src/test/java/com/juick/FormatterTest.java @@ -0,0 +1,45 @@ +package com.juick; + +import com.juick.util.DateFormattersHolder; +import org.apache.commons.lang3.RandomUtils; +import org.junit.Test; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.TimeZone; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.*; + +/** + * Created by aalexeev on 12/7/16. + */ +public class FormatterTest { + + @Test + public void forAnyDateFormatterShouldReturnNotEmptyString() throws Exception { + Date date = new Date(); + + assertThat(DateFormattersHolder.getMessageFormatterInstance().format(date), not(isEmptyOrNullString())); + assertThat(DateFormattersHolder.getRssFormatterInstance().format(date), not(isEmptyOrNullString())); + + date = new Date(RandomUtils.nextLong(1, Long.MAX_VALUE / 10000)); + + assertThat(DateFormattersHolder.getMessageFormatterInstance().format(date), not(isEmptyOrNullString())); + assertThat(DateFormattersHolder.getRssFormatterInstance().format(date), not(isEmptyOrNullString())); + } + + @Test + public void forConcreteDateShouldReturnCorrectString() throws Exception { + Calendar calendar = GregorianCalendar.getInstance(); + + calendar.set(2012, 0, 1, 0, 0, 0); + calendar.setTimeZone(TimeZone.getTimeZone("UTC")); + + Date date = calendar.getTime(); + + assertThat(DateFormattersHolder.getMessageFormatterInstance().format(date), equalTo("2012-01-01 00:00:00")); + assertThat(DateFormattersHolder.getRssFormatterInstance().format(date), equalTo("Sun, 1 Jan 2012 00:00:00")); + } +} |