Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    ListGrid Filter DateTime equals Today when client and server different Timezones

    Using the same test case from the earlier DateTime equals Today problem, we discovered that if the Server is in say America/New York timezone (GMT-4) and the client machine is in America/Los Angeles (GMT-7) and we issue the call
    Code:
    DateUtil.setDefaultDisplayTimezone("-04:00");
    The the filter for equals Today is actually evaluating to Yesterday and not to Today.

    See attached screenshots from 2 clients, you will see the current time on there as well.

    To reproduce, run server in GMT-4 timezone (America/New York), run client machine on GMT-7 (America/Los Angeles). Select DateTime filtter of equals Today, click filter.

    Code:
    public class DateTimeTest2 implements EntryPoint {
        public static final long MILLISECONDS_IN_A_SECOND = 1000;
        public static final long MILLISECONDS_IN_A_MINUTE = MILLISECONDS_IN_A_SECOND * 60L;
        public static final long MILLISECONDS_IN_A_HOUR = MILLISECONDS_IN_A_MINUTE * 60L;
        public static final long MILLISECONDS_IN_A_DAY = MILLISECONDS_IN_A_HOUR * 24L;
    
        DataSource dataSource;
        ListGrid grid;
        int counter = 0;
        ListGridRecord[] cacheData = new ListGridRecord[8];
        public static final String fpk = "ID";
        public static final String sf1 = "String_Field";
        public static final String df2 = "Date_Field";
        public static final String dtf3 = "Date_Time_Field";
    
        private void loadData(int size) {
            cacheData = new ListGridRecord[size];
            long now = System.currentTimeMillis();
            long threeDaysInPast = now - ((size / 4) * MILLISECONDS_IN_A_DAY);
            Date d = new Date(threeDaysInPast);
            for (int i = 0; i < cacheData.length; i++) {
                cacheData[i] = new ListGridRecord();
                cacheData[i].setAttribute(fpk, i);
                cacheData[i].setAttribute(sf1, "abc-" + i);
                cacheData[i].setAttribute(df2, d);
                cacheData[i].setAttribute(dtf3, d);
                d = new Date(d.getTime() + (10 * MILLISECONDS_IN_A_HOUR));
            }
        }
    
        @Override
        public void onModuleLoad() {
            DateUtil.setDefaultDisplayTimezone("-04:00");
            final VLayout appLayout = new VLayout();
            appLayout.setWidth100();
            appLayout.setHeight100();
            loadData(24);
            buildDataSource();
            buildGrid();
    
            final FilterBuilder fb = new FilterBuilder();
            fb.setTopOperatorAppearance(TopOperatorAppearance.RADIO);
            fb.setTopOperator(LogicalOperator.AND);
            fb.setShowModeSwitcher(Boolean.FALSE);
            fb.setDataSource(dataSource);
    
            IButton filterButton = new IButton("Filter");
            filterButton.addClickHandler(new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    AdvancedCriteria criteria = fb.getCriteria();
                    Criteria resolvedCriteria = dataSource.convertRelativeDates(criteria);
                    JSONEncoder encoder = new JSONEncoder();
                    encoder.setDateFormat(JSONDateFormat.LOGICAL_DATE_CONSTRUCTOR);
                    String textCriteria = encoder.encode(resolvedCriteria.getJsObj());
                    SC.say(textCriteria);
                    grid.filterData(criteria);
                }
            });
    
            IButton reloadButton = new IButton("Reload");
            reloadButton.addClickHandler(new ClickHandler() {
                @Override
                public void onClick(ClickEvent event) {
                    grid.invalidateCache();
                }
            });
    
            appLayout.setMargin(5);
            appLayout.setMembersMargin(5);
            Label currentTime = new Label((new Date()).toString());
            currentTime.setHeight(50);
            appLayout.addMembers(currentTime, fb, filterButton, reloadButton, grid);
            appLayout.draw();
        }
    
        private void buildGrid() {
            grid = new ListGrid();
            grid.setDataFetchMode(FetchMode.PAGED);
            grid.setTitle("Test Grid");
            grid.setAutoFetchData(true);
            grid.setAutoFitFieldsFillViewport(Boolean.TRUE);
            grid.setAutoFitWidthApproach(AutoFitWidthApproach.BOTH);
            grid.setAutoFitFieldWidths(Boolean.TRUE);
            grid.setCanFreezeFields(Boolean.FALSE);
            grid.setCanGroupBy(Boolean.FALSE);
            grid.setRecordComponentPoolingMode(RecordComponentPoolingMode.RECYCLE);
            grid.setAlternateRecordStyles(Boolean.TRUE);
            grid.setHeight100();
            grid.setWidth100();
            ListGridField gfld1 = new ListGridField(sf1, "String Field");
            ListGridField gfld2 = new ListGridField(df2, "Date Field");
            ListGridField gfld3 = new ListGridField(dtf3, "DateTime Field");
            grid.setFields(gfld3, gfld2, gfld1);
            grid.setDataSource(dataSource, grid.getAllFields());
        }
    
        private void buildDataSource() {
            dataSource = new DataSource();
            dataSource.setClientOnly(true);
            DataSourceField fldId = new DataSourceField(fpk, FieldType.INTEGER);
            fldId.setPrimaryKey(true);
            DataSourceField fld1 = new DataSourceField(sf1, FieldType.TEXT);
            DataSourceField fld2 = new DataSourceField(df2, FieldType.DATE);
            DataSourceField fld3 = new DataSourceField(dtf3, FieldType.DATETIME);
            dataSource.setFields(fldId, fld1, fld2, fld3);
            dataSource.setCacheData(cacheData);
        }
    }
    Attached Files

    #2
    You didn't mention what branch you were using, but we've ported a fix for this back to SGWT 5.1p/SC 10.1p and newer. It will be in the nightly builds dated 2016-04-20 and beyond.

    Comment


      #3
      Sorry. Using SmartClient Version: v10.1p_2016-04-15/Pro Deployment (built 2016-04-15)

      Comment


        #4
        Thanks works great.

        Comment

        Working...
        X