Modify

Opened 16 months ago

Closed 16 months ago

Last modified 16 months ago

#11134 closed defect (fixed)

The Timezone in list view mode is UTC instead of req.tz.

Reported by: Genie Owned by: jun66j5
Priority: normal Component: TicketCalendarPlugin
Severity: normal Keywords:
Cc: Trac Release: 0.12

Description

I think missing timezone conversion in function _parse_duration_arg().

def _parse_duration_arg(arg):
    default = datetime.now(utc).date(), 7
    if not arg or '/P' not in arg:
        return default
    start, period = arg.split('/P', 1)
    try:
        start = parse_date(start, tzinfo=utc)
    except:
        start = None
    if not start:
        return default
    start = start.date()
    if period.endswith('D'):
        try:
            period = int(period[:-1])
        except:
            period = 0
        if period > 0:
            return start, period
    return default

Attachments (1)

timezone-issue.png (27.3 KB) - added by Genie 16 months ago.
This is result of run at 2013-06-03 01:36 in KST/JST timezone #2

Download all attachments as: .zip

Change History (15)

comment:1 follow-up: Changed 16 months ago by jun66j5

  • Status changed from new to assigned
  • Trac Release set to 0.12

_parse_duration_arg() returns a tuple of (date, period). Also, get_start_date() and get_due_date() of TicketCalendarModule return a date instance. The date instances has no timezone. So, the methods don't depend on user's timezone.

However, Milestone.due is a datetime which has a timezone. Indeed, the plugin has some issue for timezone.

Python 2.4.3 (#1, Jan  9 2013, 06:49:54)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-54)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from ticketcalendar.web_ui import _parse_duration_arg
>>> _parse_duration_arg('2013-06-02/P14D')
(datetime.date(2013, 6, 2), 14)
>>> from trac.util.datefmt import utc, parse_date
>>> from datetime import datetime
>>> dt = parse_date('2013-06-02', tzinfo=utc)
>>> dt.date()
datetime.date(2013, 6, 2)
>>> datetime.now(utc).date()
datetime.date(2013, 6, 2)

comment:2 in reply to: ↑ 1 Changed 16 months ago by Genie

Replying to jun66j5:

Indeed, the plugin has some issue for timezone.

It has some issues at am 00:00 ~ 09:00 in KST/JST timezone (UTC+9).

Changed 16 months ago by Genie

This is result of run at 2013-06-03 01:36 in KST/JST timezone #2

comment:3 Changed 16 months ago by Genie

This is result of run at 2013-06-03 01:36 in KST/JST timezone

This is result of run at 2013-06-03 01:36 in KST/JST timezone #2

comment:4 follow-up: Changed 16 months ago by jun66j5

The list view shows events from the first day to the last day in this week, not from today. Also, the first day of week is configurable with [ticketcalendar] first_week_day.

comment:5 Changed 16 months ago by jun66j5

Ah, I've misunderstood. You're right. I'll fix the problem in comment:2.

comment:6 in reply to: ↑ 4 ; follow-up: Changed 16 months ago by anonymous

Replying to jun66j5:

The list view shows events from the first day to the last day in this week, not from today. Also, the first day of week is configurable with [ticketcalendar] first_week_day.

I think that the start_date is today by default, isn't it ?

and, today in list view mode is wrong displayed by timezone.

comment:7 in reply to: ↑ 6 Changed 16 months ago by jun66j5

Replying to anonymous:

I think that the start_date is today by default, isn't it ?
and, today in list view mode is wrong displayed by timezone.

Yes, the first day in list view is today. Sorry, my comment:4 is wrong.

comment:8 Changed 16 months ago by jun66j5

  • Resolution set to fixed
  • Status changed from assigned to closed

(In [13256]) ticketcalendar: fixed wrong first day in list view on non-GMT timezone

Closes #11134.

comment:9 Changed 16 months ago by Genie

Thank you for your help :)

comment:10 Changed 16 months ago by jun66j5

(In [13257]) ticketcalendar: fixed the same issue in _parse_month_arg() on non-GMT timezone, confirmed using libfaketime (refs #11134)

comment:11 Changed 16 months ago by Genie

It still have Timezone issues: syntax date.today()
The result of date.today() is depend on Server's local timezone. and it is diffent timezone.

comment:12 follow-up: Changed 16 months ago by jun66j5

  • Resolution fixed deleted
  • Status changed from closed to reopened

Good catch! It should be datetime.now(req.tz).date() instead.

comment:13 Changed 16 months ago by jun66j5

  • Resolution set to fixed
  • Status changed from reopened to closed

(In [13259]) ticketcalendar: Don't use date.today() which depends on local timezone (fixed #11134)

comment:14 in reply to: ↑ 12 Changed 16 months ago by anonymous

Replying to jun66j5:

Good catch! It should be datetime.now(req.tz).date() instead.

Wow, very very speedy response!

I suppose that the string based date(start_date/due_date) seems to have logical timezone issue probably.

Add Comment

Modify Ticket

Action
as closed .
The resolution will be deleted. Next status will be 'reopened'.
Author


E-mail address and user name can be saved in the Preferences.

 
Note: See TracTickets for help on using tickets.