Hello,

This check-in is highly topical, as clocks rolled back one hour in most parts 
of Europe this morning :)

I've implemented conversions in forms and widgets, and in the admin too. I've 
made template filters convert their input to the current time zone when 
appropriate. I've added a context processor and a template tag that give access 
to the current time zone in templates.

I've written docs.

As a sanity check, I created a demo app: 
https://bitbucket.org/aaugustin/django-tz-demo

This means I've reached the point where the branch is usable. Try it! Clone 
https://bitbucket.org/aaugustin/django, put it in PYTHONPATH, set USE_TZ=True, 
and you're good to go. If you have questions, I'm mYk in #django-dev on 
Freenode.

I still have a few details to iron out before the branch is ready for merging:
        - flesh out the docs with some code samples
        - write the release notes
        - check how values used as parameters and computed values behave in the 
ORM
        - check how the timesince and timeuntil template filters behave
        - ensure the cache depends on the current timezone
        - investigate this comment in django/contrib/gis/gdal/field.py: # TODO: 
Adapt timezone information.
        - fix bugs found by reviewers :)

Additional work could include:
        - performance tests
        - refactoring django.utils.timezone and django.utils.tzinfo -- tzinfo 
supports functions such as naturaltime, timesince, timeuntil, dateformat, but 
it wasn't compatible with the features I needed for the time zone support, so I 
wrote a new module.
        - refactoring datetime parsing / formatting utilities throughout 
Django, and in particular django.db.backends.util.typecast_* -- I keep finding 
bugs such as #17134

Initially, I considered writing a script to automatically shift timestamps in 
the database backends that need it, to ease the migration of existing projects 
to USE_TZ=True. Upon further thought, I'm reluctant to mess with people's 
databases, even with a big fat disclaimer. If I write such a script, I'll 
upload it to djangosnippets.

Best regards,

-- 
Aymeric Augustin.

On 23 oct. 2011, at 17:21, Aymeric Augustin wrote:

> Hello,
> 
> I was getting weary of archeology in database adaptation code, so I've been 
> working on the template layer this week.
> 
> It is now possible to control the localization of datetimes in templates. I 
> also introduced a "current time zone" (before someone asks: yes, it's a 
> thread local) and the possibility to change it in Python and template code. 
> This works with and without pytz. The next step in this area is to handle 
> conversions is forms and widgets.
> 
> I still have to figure out where it's better to use the "default time zone" 
> (settings.TIME_ZONE) and where it's better to use "current time zone" to 
> interpret naive datetimes. Depending on the answer, I may have to make the 
> model layer aware of the "current time zone".
> 
> As usual, if you're curious: 
> https://bitbucket.org/aaugustin/django/compare/..django/django
> 
> Best regards,
> 
> -- 
> Aymeric Augustin.
> 
> 
> On 16 oct. 2011, at 11:48, Aymeric Augustin wrote:
> 
>> Hello,
>> 
>> I've implemented the storage and retrieval of aware datetime objects in 
>> SQLite. This involved some refactoring, because SQLite returns datetimes as 
>> strings, and I didn't want to duplicate the parsing code. All database 
>> backends are now covered.
>> 
>> Although it isn't strictly necessary for my project, I suspect the 
>> django.db.backends.util.typecast_* functions could use further refactoring. 
>> They date back to r3, and the database adapters have become better at 
>> converting data to Python objects since then. This deserves more research.
>> 
>> I've also committed a patch for #16906 that I wanted to merge in my branch 
>> before further work, and fixed some related tickets (#16899, #16923, #4076).
>> 
>> I've had other priorities since my last check-in; I hope I'll have more time 
>> for this project now.
>> 
>> Best regards,
>> 
>> -- 
>> Aymeric Augustin.
>> 
>> 
>> 
>> On 2 oct. 2011, at 14:38, Aymeric Augustin wrote:
>> 
>>> Hello,
>>> 
>>> This week, I've finished the work on serialization by making the 
>>> deserializers capable of handling UTC offsets. I had to rewrite 
>>> DateTimeField.to_python to extract and interpret timezone offsets. Still, 
>>> deserialization of aware datetimes doesn't work with PyYAML: 
>>> http://pyyaml.org/ticket/202
>>> 
>>> I also implemented the storage and retrieval of aware datetime objects in 
>>> PostgreSQL, MySQL and Oracle. Conversions happen:
>>>     - on storage, in `connection.ops.value_to_db_datetime`, called from 
>>> `get_db_prep_value`;
>>>     - on retrieval, in the database adapter's conversion functions.
>>> The code is rather straightforward. When USE_TZ is True, naive datetimes 
>>> are interpreted as local time in TIME_ZONE, for backwards compatibility 
>>> with existing applications.
>>> 
>>> SQLite is more tricky because it uses 
>>> `django.db.backends.util.typecast_timestamp` to convert string to 
>>> datetimes. However:
>>>     - this function is used elsewhere of Django, in combination with the 
>>> `needs_datetime_string_cast` flag. 
>>>     - it performs essentially the same operations as 
>>> `DateTimeField.to_python`.
>>> I'll review the history of this code, and I'll try to refactor it.
>>> 
>>> Besides adding support for SQLite, I still have to:
>>>     - check that datetimes behave correctly when they're used as query 
>>> arguments, in aggregation functions, etc.
>>>     - optimize django.utils.tzinfo: fix #16899, use pytz.utc as the UTC 
>>> timezone class when pytz is available, etc.
>>> 
>>> I won't have much time for this project next week. See you in two weeks for 
>>> the next check-in!
>>> 
>>> Best regards,
>>> 
>>> -- 
>>> Aymeric Augustin.
>>> 
>>> On 24 sept. 2011, at 15:24, Aymeric Augustin wrote:
>>> 
>>>> Hello,
>>>> 
>>>> This week, I've been working on a related topic that I had missed entirely 
>>>> in my initial proposal: serialization.
>>>> 
>>>> Developers will obtain aware datetimes from Django when USE_TZ = True. We 
>>>> must ensure that they serialize correctly.
>>>> 
>>>> Currently, the serialization code isn't very consistent with datetimes:
>>>>    - JSON: the serializer uses the '%Y-%m-%d %H:%M:%S' format, losing 
>>>> microseconds and timezone information. This dates back to the initial 
>>>> commit at r3237. See also #10201.
>>>>    - XML: the serializer delegates to DateTimeField.value_to_string, who 
>>>> also uses the '%Y-%m-%d %H:%M:%S' format.
>>>>    - YAML: the serializer handles datetimes natively, and it includes 
>>>> microseconds and UTC offset in the output.
>>>> 
>>>> I've hesitated between converting datetimes to UTC or rendering them as-is 
>>>> with an UTC offset. The former would be more consistent with the database 
>>>> and it's recommended in YAML. But the latter avoids modifying the data: 
>>>> not only is it faster, but it's also more predictable. Serialization isn't 
>>>> just about storing the data for further retrieval, it can be used to print 
>>>> arbitrary data in a different format. Finally, when the data comes 
>>>> straight from the database (the common case), it will be in UTC anyway.
>>>> 
>>>> Eventually, I've decided to serialize aware datetimes without conversion. 
>>>> The implementation is here:
>>>> https://bitbucket.org/aaugustin/django/compare/..django/django
>>>> 
>>>> Here are the new serialization formats for datetimes:
>>>>    - JSON: as described in the specification at 
>>>> http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf 
>>>> > 15.9.1.15 Date Time String Format.
>>>>    - XML: as produced by datetime.isoformat(), ISO8601.
>>>>    - YAML: unchanged, compatible with http://yaml.org/type/timestamp.html 
>>>> — the canonical representation uses 'T' as separator and is in UTC, but 
>>>> it's also acceptable to use a space and include an offset like pyyaml does.
>>>> These formats follow the best practices described in 
>>>> http://www.w3.org/TR/NOTE-datetime.
>>>> 
>>>> This fix is backwards-incompatible for the JSON and XML serializers: it 
>>>> includes fractional seconds and timezone information, and it uses the 
>>>> normalized separator, 'T', between the date and time parts. However, I've 
>>>> made sure that existing fixtures will load properly with the new code. 
>>>> I'll mention all this in the release notes.
>>>> 
>>>> Unrelatedly, I have switched the SQLite backend to supports_timezones = 
>>>> False, because it really doesn't make sense to write the UTC offset but 
>>>> ignore it when reading back the data.
>>>> 
>>>> Best regards,
>>>> 
>>>> -- 
>>>> Aymeric Augustin.
>>>> 
>>>> On 17 sept. 2011, at 09:59, Aymeric Augustin wrote:
>>>> 
>>>>> Hello,
>>>>> 
>>>>> This week, I've gathered all the information I need about how the 
>>>>> database engines and adapters supported by Django handle datetime 
>>>>> objects. I'm attaching my findings.
>>>>> 
>>>>> The good news is that the database representations currently used by 
>>>>> Django are already optimal for my proposal. I'll store data in UTC:
>>>>> - with an explicit timezone on PostgreSQL,
>>>>> - without timezone on SQLite and MySQL because the database engine 
>>>>> doesn't support it,
>>>>> - without timezone on Oracle because the database adapter doesn't support 
>>>>> it.
>>>>> 
>>>>> 
>>>>> Currently, Django sets the "supports_timezones feature" to True for 
>>>>> SQLite. I'm skeptical about this choice. Indeed, the time zone is stored: 
>>>>> SQLite just saves the output of "<datetime>.isoformat(), which includes 
>>>>> the UTC offset for aware datetime objects. However, the timezone 
>>>>> information is ignored when reading the data back from the database, thus 
>>>>> yielding incorrect data when it's different from the local time defined 
>>>>> by settings.TIME_ZONE.
>>>>> 
>>>>> As far as I can tell, the "supports_timezones" and the 
>>>>> "needs_datetime_string_cast" database features are incompatible, at least 
>>>>> with the current implementation of "typecast_timestamp". There's a 
>>>>> comment about this problem that dates back to the merge of magic-removal, 
>>>>> possibly before:
>>>>> https://code.djangoproject.com/browser/django/trunk/django/db/backends/util.py?annotate=blame#L79
>>>>> 
>>>>> SQLite is the only engine who has these two flags set to True. I think 
>>>>> "supports_timezones" should be False. Does anyone know why it's True? Is 
>>>>> it just an historical artifact?
>>>>> 
>>>>> 
>>>>> Finally, I have read the document that describes "to_python", 
>>>>> "value_to_string", and r"get_(db_)?prep_(value|save|lookup)". The next 
>>>>> step is to adjust these functions in DateFieldField, depending on the 
>>>>> value of settings.USE_TZ.
>>>>> 
>>>>> Best regards,
>>>>> 
>>>>> -- 
>>>>> Aymeric Augustin.
>>>>> 
>>>>> <DATABASE-NOTES.html>
>>>>> 
>>>>> On 11 sept. 2011, at 23:18, Aymeric Augustin wrote:
>>>>> 
>>>>>> Hello,
>>>>>> 
>>>>>> Given the positive feedback received here and on IRC, I've started the 
>>>>>> implementation.
>>>>>> 
>>>>>> Being most familiar with mercurial, I've forked the Bitbucket mirror. 
>>>>>> This page that compares my branch to trunk:
>>>>>> https://bitbucket.org/aaugustin/django/compare/..django/django
>>>>>> 
>>>>>> I've read a lot of code in django.db, and also the documentation of 
>>>>>> PostgreSQL, MySQL and SQLite regarding date/time types.
>>>>>> 
>>>>>> I've written some tests that validate the current behavior of Django. 
>>>>>> Their goal is to guarantee backwards-compatibility when USE_TZ = False.
>>>>>> 
>>>>>> At first they failed because runtests.py doesn't set os.environ['TZ'] 
>>>>>> and doesn't call time.tzset() , so the tests ran with my system local 
>>>>>> time. I fixed that in setUp and tearDown. Maybe we should call them in 
>>>>>> runtests.py too for consistency?
>>>>>> 
>>>>>> By the way, since everything is supposed to be in UTC internally when 
>>>>>> USE_TZ is True, it is theoretically to get rid of os.environ['TZ'] and 
>>>>>> time.tzset(). They are only useful to make timezone-dependant functions 
>>>>>> respect the TIME_ZONE setting. However, for backwards compatibility (in 
>>>>>> particular with third-party apps), it's better to keep them and 
>>>>>> interpret naive datetimes in the timezone defined by settings.TIME_ZONE 
>>>>>> (instead of rejecting them outright). For this reason, I've decided to 
>>>>>> keep os.environ['TZ'] and time.tzset() even when USE_TZ is True.
>>>>>> 
>>>>>> Best regards,
>>>>>> 
>>>>>> -- 
>>>>>> Aymeric Augustin.
>>>>>> 
>>>>>> 
>>>>>> On 3 sept. 2011, at 17:40, Aymeric Augustin wrote:
>>>>>> 
>>>>>>> Hello,
>>>>>>> 
>>>>>>> The GSoC proposal "Multiple timezone support for datetime 
>>>>>>> representation" wasn't picked up in 2011 and 2010. Although I'm not a 
>>>>>>> student and the summer is over, I'd like to tackle this problem, and I 
>>>>>>> would appreciate it very much if a core developer accepted to mentor me 
>>>>>>> during this work, GSoC-style.
>>>>>>> 
>>>>>>> Here is my proposal, following the GSoC guidelines. I apologize for the 
>>>>>>> wall of text; this has been discussed many times in the past 4 years 
>>>>>>> and I've tried to address as many concerns and objections as possible.
>>>>>>> 
>>>>>>> Definition of success
>>>>>>> ---------------------
>>>>>>> 
>>>>>>> The goal is to resolve ticket #2626 in Django 1.4 or 1.5 (depending on 
>>>>>>> when 1.4 is released).
>>>>>>> 
>>>>>>> Design specification
>>>>>>> --------------------
>>>>>>> 
>>>>>>> Some background on timezones in Django and Python
>>>>>>> .................................................
>>>>>>> 
>>>>>>> Currently, Django stores datetime objects in local time in the 
>>>>>>> database, local time being defined by the TIME_ZONE setting. It 
>>>>>>> retrieves them as naive datetime objects. As a consequence, developers 
>>>>>>> work with naive datetime objects in local time.
>>>>>>> 
>>>>>>> This approach sort of works when all the users are in the same timezone 
>>>>>>> and don't care about data loss (inconsistencies) when DST kicks in or 
>>>>>>> out. Unfortunately, these assumptions aren't true for many Django 
>>>>>>> projects: for instance, one may want to log sessions (login/logout) for 
>>>>>>> security purposes: that's a 24/7 flow of important data. Read tickets 
>>>>>>> #2626 and #10587 for more details.
>>>>>>> 
>>>>>>> Python's standard library provides limited support for timezones, but 
>>>>>>> this gap is filled by pytz <http://pytz.sourceforge.net/>. If you 
>>>>>>> aren't familiar with the topic, strongly recommend reading this page 
>>>>>>> before my proposal. It explains the problems of working in local time 
>>>>>>> and the limitations of Python's APIs. It has a lot of examples, too.
>>>>>>> 
>>>>>>> Django should use timezone-aware UTC datetimes internally
>>>>>>> .........................................................
>>>>>>> 
>>>>>>> Example : datetime.datetime(2011, 09, 23, 8, 34, 12, tzinfo=pytz.utc)
>>>>>>> 
>>>>>>> In my opinion, the problem of local time is strikingly similar to the 
>>>>>>> problem character encodings. Django uses only unicode internally and 
>>>>>>> converts at the borders (HTTP requests/responses and database). I 
>>>>>>> propose a similar solution: Django should always use UTC internally, 
>>>>>>> and conversion should happen at the borders, i.e. when rendering the 
>>>>>>> templates and processing POST data (in form fields/widgets). I'll 
>>>>>>> discuss the database in the next section.
>>>>>>> 
>>>>>>> Quoting pytz' docs: "The preferred way of dealing with times is to 
>>>>>>> always work in UTC, converting to localtime only when generating output 
>>>>>>> to be read by humans." I think we can trust pytz' developers on this 
>>>>>>> topic.
>>>>>>> 
>>>>>>> Note that a timezone-aware UTC datetime is different from a naive 
>>>>>>> datetime. If we were using naive datetimes, and assuming we're using 
>>>>>>> pytz, a developer could write:
>>>>>>> 
>>>>>>> mytimezone.localize(datetime_django_gave_me)
>>>>>>> 
>>>>>>> which is incorrect, because it will interpret the naive datetime as 
>>>>>>> local time in "mytimezone". With timezone-aware UTC datetime, this kind 
>>>>>>> of errors can't happen, and the equivalent code is:
>>>>>>> 
>>>>>>> datetime_django_gave_me.astimezone(mytimezone)
>>>>>>> 
>>>>>>> Django should store datetimes in UTC in the database
>>>>>>> ....................................................
>>>>>>> 
>>>>>>> This horse has been beaten to death on this mailing-list so many times 
>>>>>>> that I'll  keep the argumentation short. If Django handles everything 
>>>>>>> as UTC internally, it isn't useful to convert to anything else for 
>>>>>>> storage, and re-convert to UTC at retrieval.
>>>>>>> 
>>>>>>> In order to make the database portable and interoperable:
>>>>>>> - in databases that support timezones (at least PostgreSQL), the 
>>>>>>> timezone should be set to UTC, so that the data is unambiguous;
>>>>>>> - in databases that don't (at least SQLite), storing data in UTC is the 
>>>>>>> most reasonable choice: if there's a "default timezone", that's UTC.
>>>>>>> 
>>>>>>> I don't intend to change the storage format of datetimes. It has been 
>>>>>>> proposed on this mailing-list to store datetimes with original timezone 
>>>>>>> information. However, I suspect that in many cases, datetimes don't 
>>>>>>> have a significant "original timezone" by themselves. Furthermore, 
>>>>>>> there are many different ways to implemented this outside of Django's 
>>>>>>> core. One is to store a local date + a local time + a place or timezone 
>>>>>>> + is_dst flag and skip datetime entirely. Another is to store an UTC 
>>>>>>> datetime + a place or timezone. In the end, since there's no obvious 
>>>>>>> and consensual way to implement this idea, I've chosen to exclude it 
>>>>>>> from my proposal. See the "Timezone-aware storage of DateTime" thread 
>>>>>>> on this mailing list for a long and non-conclusive discussion of this 
>>>>>>> idea.
>>>>>>> 
>>>>>>> I'm expecting to take some flak because of this choice :) Indeed, if 
>>>>>>> you're writing a multi-timezone calendaring application, my work isn't 
>>>>>>> going to resolve all your problems — but it won't hurt either. It may 
>>>>>>> even provide a saner foundation to build upon. Once again, there's more 
>>>>>>> than one way to solve this problem, and I'm afraid that choosing one 
>>>>>>> would offend some people sufficiently to get the entire proposal 
>>>>>>> rejected.
>>>>>>> 
>>>>>>> Django should convert between UTC and local time in the templates and 
>>>>>>> forms
>>>>>>> ...........................................................................
>>>>>>> 
>>>>>>> I regard the problem of local time (in which time zone is my user?) as 
>>>>>>> very similar to internationalization (which language does my user 
>>>>>>> read?), and even more to localization (in which country does my user 
>>>>>>> live?), because localization happens both on output and on input.
>>>>>>> 
>>>>>>> I want controllable conversion to local time when rendering a datetime 
>>>>>>> in a template. I will introduce:
>>>>>>> - a template tag, {% localtime on|off %}, that works exactly like {% 
>>>>>>> localize on|off %}; it will be available with {% load tz %};
>>>>>>> - two template filters, {{ datetime|localtime }} and {{ 
>>>>>>> datetime|utctime }}, that work exactly like {{ value|localize }} and {{ 
>>>>>>> value|unlocalize }}.
>>>>>>> 
>>>>>>> I will convert datetimes to local time when rendering a DateTimeInput 
>>>>>>> widget, and also handle SplitDateTimeWidget and 
>>>>>>> SplitHiddenDateTimeWidget which are more complicated.
>>>>>>> 
>>>>>>> Finally, I will convert datetimes entered by end-users in forms to UTC. 
>>>>>>> I can't think of cases where you'd want an interface in local time but 
>>>>>>> user input in UTC. As a consequence, I don't plan to introduce the 
>>>>>>> equivalent of the `localize` keyword argument in form fields, unless 
>>>>>>> someone brings up a sufficiently general use case.
>>>>>>> 
>>>>>>> How to set each user's timezone
>>>>>>> ...............................
>>>>>>> 
>>>>>>> Internationalization and localization are based on the LANGUAGES 
>>>>>>> setting. There's a widely accepted standard to select automatically the 
>>>>>>> proper language and country, the Accept-Language header.
>>>>>>> 
>>>>>>> Unfortunately, some countries like the USA have more than one timezone, 
>>>>>>> so country information isn't enough to select a timezone. To the best 
>>>>>>> of my knowledge, there isn't a widely accepted way to determine the 
>>>>>>> timezones of the end users on the web.
>>>>>>> 
>>>>>>> I intend to use the TIME_ZONE setting by default and to provide an 
>>>>>>> equivalent of `translation.activate()` for setting the timezone. With 
>>>>>>> this feature, developers can implement their own middleware to set the 
>>>>>>> timezone for each user, for instance they may want to use 
>>>>>>> <http://pytz.sourceforge.net/#country-information>.
>>>>>>> 
>>>>>>> This means I'll have to introduce another thread local. I know this is 
>>>>>>> frowned upon. I'd be very interested if someone has a better idea.
>>>>>>> 
>>>>>>> It might be no longer necessary to set os.environ['TZ'] and run 
>>>>>>> time.tzset() at all. That would avoid a number of problems and make 
>>>>>>> Windows as well supported as Unix-based OSes — there's a bunch of 
>>>>>>> tickets in Trac about this.
>>>>>>> 
>>>>>>> I'm less familiar with this part of the project and I'm interested in 
>>>>>>> advice about how to implement it properly.
>>>>>>> 
>>>>>>> Backwards compatibility
>>>>>>> .......................
>>>>>>> 
>>>>>>> Most previous attempts to resolve have stumbled upon this problem.
>>>>>>> 
>>>>>>> I propose to introduce a USE_TZ settings (yes, I know, yet another 
>>>>>>> setting) that works exactly like USE_L10N. If set to False, the 
>>>>>>> default, you will get the legacy (current) behavior. Thus, existing 
>>>>>>> websites won't be affected. If set to True, you will get the new 
>>>>>>> behavior described above.
>>>>>>> 
>>>>>>> I will also explain in the release notes how to migrate a database — 
>>>>>>> which means shifting all datetimes to UTC. I will attempt to develop a 
>>>>>>> script to automate this task.
>>>>>>> 
>>>>>>> Dependency on pytz
>>>>>>> ..................
>>>>>>> 
>>>>>>> I plan to make pytz a mandatory dependency when USE_TZ is True. This 
>>>>>>> would be similar to the dependency on on gettext when USE_I18N is True.
>>>>>>> 
>>>>>>> pytz gets a new release every time the Olson database is updated. For 
>>>>>>> this reason, it's better not to copy it in Django, unlike simplejson 
>>>>>>> and unittest2.
>>>>>>> 
>>>>>>> It was split from Zope some time ago. It's a small amount of clean code 
>>>>>>> and it could be maintained within Django if it was abandoned (however 
>>>>>>> unlikely that sounds).
>>>>>>> 
>>>>>>> Miscellaneous
>>>>>>> .............
>>>>>>> 
>>>>>>> The following items have caused bugs in the past and should be checked 
>>>>>>> carefully:
>>>>>>> 
>>>>>>> - caching: add timezone to cache key? See #5691.
>>>>>>> - functions that use LocalTimezone: naturaltime, timesince, timeuntil, 
>>>>>>> dateformat.
>>>>>>> - os.environ['TZ']. See #14264.
>>>>>>> - time.tzset() isn't supported on Windows. See #7062.
>>>>>>> 
>>>>>>> Finally, my proposal shares some ideas with 
>>>>>>> https://github.com/brosner/django-timezones; I didn't find any 
>>>>>>> documentation, but I intend to review the code.
>>>>>>> 
>>>>>>> About me
>>>>>>> --------
>>>>>>> 
>>>>>>> I've been working with Django since 2008. I'm doing a lot of triage in 
>>>>>>> Trac, I've written some patches (notably r16349, r16539, r16548, also 
>>>>>>> some documentation improvements and bug fixes), and I've helped to set 
>>>>>>> up continuous integration (especially for Oracle). In my day job, I'm 
>>>>>>> producing enterprise software based on Django with a team of ten 
>>>>>>> developers.
>>>>>>> 
>>>>>>> Work plan
>>>>>>> ---------
>>>>>>> 
>>>>>>> Besides the research that's about 50% done, and discussion that's going 
>>>>>>> to take place now, I expect the implementation and tests to take me 
>>>>>>> around 80h. Given how much free time I can devote to Django, this means 
>>>>>>> three to six months.
>>>>>>> 
>>>>>>> Here's an overview of my work plan:
>>>>>>> 
>>>>>>> - Implement the USE_TZ flag and database support — this requires 
>>>>>>> checking the capabilities of each supported database in terms of 
>>>>>>> datetime types and time zone support. Write tests, especially to ensure 
>>>>>>> backwards compatibility. Write docs. (20h)
>>>>>>> 
>>>>>>> - Implement timezone localization in templates. Write tests. Write 
>>>>>>> docs. (10h)
>>>>>>> 
>>>>>>> - Implement timezone localization in widgets and forms. Check the admin 
>>>>>>> thoroughly. Write tests. Write docs. (15h)
>>>>>>> 
>>>>>>> - Implement the utilities to set the user's timezone. Write tests. 
>>>>>>> Write docs. (15h)
>>>>>>> 
>>>>>>> - Reviews, etc. (20h)
>>>>>>> 
>>>>>>> What's next?
>>>>>>> ------------
>>>>>>> 
>>>>>>> Constructive criticism, obviously :) Remember that the main problems 
>>>>>>> here are backwards-compatibility and keeping things simple.
>>>>>>> 
>>>>>>> Best regards,
>>>>>>> 
>>>>>>> -- 
>>>>>>> Aymeric.
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> 
>>>>>>> Annex: Research notes
>>>>>>> ---------------------
>>>>>>> 
>>>>>>> Wiki
>>>>>>> ....
>>>>>>> 
>>>>>>> [GSOC] 
>>>>>>> https://code.djangoproject.com/wiki/SummerOfCode2011#Multipletimezonesupportfordatetimerepresentation
>>>>>>> 
>>>>>>> Relevant tickets
>>>>>>> ................
>>>>>>> 
>>>>>>> #2626: canonical ticket for this issue
>>>>>>> 
>>>>>>> #2447: dupe, an alternative solution
>>>>>>> #8953: dupe, not much info
>>>>>>> #10587: dupe, a fairly complete proposal, but doesn't address backwards 
>>>>>>> compatibility for existing data
>>>>>>> 
>>>>>>> Relevant related tickets
>>>>>>> ........................
>>>>>>> 
>>>>>>> #14253: how should "now" behave in the admin when "client time" != 
>>>>>>> "server time"?
>>>>>>> 
>>>>>>> Irrelevant related tickets
>>>>>>> ..........................
>>>>>>> 
>>>>>>> #11385: make it possible to enter data in a different timezone in 
>>>>>>> DateTimeField
>>>>>>> #12666: timezone in the 'Date:' headers of outgoing emails - 
>>>>>>> independant resolution
>>>>>>> 
>>>>>>> Relevant threads
>>>>>>> ................
>>>>>>> 
>>>>>>> 2011-05-31  Timezone-aware storage of DateTime
>>>>>>> http://groups.google.com/group/django-developers/browse_thread/thread/76e2b486d561ab79
>>>>>>> 
>>>>>>> 2010-08-16  Datetimes with timezones for mysql
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/5e220687b7af26f5
>>>>>>> 
>>>>>>> 2009-03-23  Django internal datetime handling
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/ca023360ab457b91
>>>>>>> 
>>>>>>> 2008-06-25  Proposal: PostgreSQL backends should *stop* using 
>>>>>>> settings.TIME_ZONE
>>>>>>> http://groups.google.com/group/django-developers/browse_thread/thread/b8c885389374c040
>>>>>>> 
>>>>>>> 2007-12-02  Timezone aware datetimes and MySQL (ticket #5304)
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/a9d765f83f552fa4
>>>>>>> 
>>>>>>> Relevant related threads
>>>>>>> ........................
>>>>>>> 
>>>>>>> 2009-11-24  Why not datetime.utcnow() in auto_now/auto_now_add
>>>>>>> http://groups.google.com/group/django-developers/browse_thread/thread/4ca560ef33c88bf3
>>>>>>> 
>>>>>>> Irrelevant related threads
>>>>>>> ..........................
>>>>>>> 
>>>>>>> 2011-07-25  "c" date formating and Internet usage
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/61296125a4774291
>>>>>>> 
>>>>>>> 2011-02-10  GSoC 2011 student contribution
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/0596b562cdaeac97/585ce1b04632198a?#585ce1b04632198a
>>>>>>> 
>>>>>>> 2010-11-04  Changing settings per test
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/65aabb45687e572e
>>>>>>> 
>>>>>>> 2009-09-15  What is the status of auto_now and auto_now_add?
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/cd1a76bca6055179
>>>>>>> 
>>>>>>> 2009-03-09  TimeField broken in Oracle
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/bba2f80a2ca9b068
>>>>>>> 
>>>>>>> 2009-01-12  Rolling back tests -- status and open issues
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/1e4f4c840b180895
>>>>>>> 
>>>>>>> 2008-08-05  Transactional testsuite
>>>>>>> https://groups.google.com/group/django-developers/browse_thread/thread/49aa551ad41fb919
>>>>>>> 
>>>>>> 
>>>>> 
>>>> 
>>> 
>> 
> 

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers" group.
To post to this group, send email to django-developers@googlegroups.com.
To unsubscribe from this group, send email to 
django-developers+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-developers?hl=en.

Reply via email to