GWT: use DateTimeFormat on client and SimpleDateFormat on server

后端 未结 5 831
无人及你
无人及你 2020-12-17 09:34

I have a function that must work the same way on both client and server and it formats dates.

if (GWT.isClient())
{
  // Use DateTimeFormat
} else {
  // Use         


        
5条回答
  •  南方客
    南方客 (楼主)
    2020-12-17 10:21

    import java.util.Date;
    
    import com.google.gwt.core.shared.GWT;
    import com.google.gwt.thirdparty.guava.common.annotations.GwtCompatible;
    import com.google.gwt.thirdparty.guava.common.annotations.GwtIncompatible;
    
    public abstract class DateTimeFormat
    {
        static DateTimeFormat getFormat(String pattern)
        {
            if (GWT.isClient())
                return DateTimeFormatClient.getFormat(pattern);
            else
                return DateTimeFormatServer.getFormat(pattern);
        }
    
        public abstract String format(Date date);
    
        @GwtCompatible
        private static class DateTimeFormatClient extends DateTimeFormat
        {
            private com.google.gwt.i18n.client.DateTimeFormat dateTimeFormat;
    
            protected DateTimeFormatClient(String pattern)
            {
                this.dateTimeFormat = com.google.gwt.i18n.client.DateTimeFormat.getFormat(pattern);
            }
    
            public static DateTimeFormat getFormat(String pattern)
            {
                return new DateTimeFormatClient(pattern);
            }
    
            public String format(Date date)
            {
                return dateTimeFormat.format(date);
            }
        }
    
        @GwtIncompatible("Server version of the class")
        private static class DateTimeFormatServer extends DateTimeFormat
        {
            private java.text.SimpleDateFormat dateTimeFormat;
    
            protected DateTimeFormatServer(String pattern)
            {
                this.dateTimeFormat = new java.text.SimpleDateFormat(pattern);
            }
    
            public static DateTimeFormat getFormat(String pattern)
            {
                return new DateTimeFormatServer(pattern);
            }
    
            public String format(Date date)
            {
                return dateTimeFormat.format(date);
            }       
    
        }
    }
    

提交回复
热议问题