[issue15873] datetime cannot parse ISO 8601 dates and times

2013-03-09 Thread Anders Hovmöller

Anders Hovmöller added the comment:

Éric Araujo: absolutely. Although I think my code can be improved (speed wise, 
elegance, etc) since I just wrote it quickly a weekend :)

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2013-03-08 Thread Éric Araujo

Éric Araujo added the comment:

Are you offering the module for inclusion in the stdlib?

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2013-03-07 Thread Anders Hovmöller

Anders Hovmöller added the comment:

I've written a parser for ISO 8601: https://github.com/boxed/iso8601

Some basic tests are included and it supports most of the standard. Haven't 
gotten around to the more obscure parts like durations and intervals, but those 
are trivial to add...

--
nosy: +Anders.Hovmöller

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-11-01 Thread Éric Araujo

Changes by Éric Araujo mer...@netwok.org:


--
nosy: +eric.araujo

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-11-01 Thread kirpit

Changes by kirpit kir...@gmail.com:


--
nosy: +kirpit

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-10-31 Thread flying sheep

flying sheep added the comment:

there is a module that parses those strings pretty nicely, it’s called 
pyiso8601: http://code.google.com/p/pyiso8601/

in the context of writing a better plistlib, i also needed the capability to 
parse those strings, and decided not to use the sucky incomplete implementation 
of plistlib, but the one mentioned above.

i py3ified it, eliminating quite some code, and the result is pretty terse, 
check it out: https://github.com/flying-sheep/plist/blob/master/iso8601.py

note that that implementation returns utc-datetimes for timezoneless strings, 
instead of naive ones. (l.30)

--
nosy: +flying sheep

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-10 Thread Matej Cepl

Changes by Matej Cepl mc...@redhat.com:


--
nosy: +mcepl

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-10 Thread Roy Smith

Roy Smith added the comment:

I've started collecting some test cases.  I'll keep adding to the collection.  
I'm going to start trolling ISO 8601:2004(E) for more.  Let me know if there 
are other sources I should be considering.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-10 Thread Roy Smith

Roy Smith added the comment:

Ooops, clicked the wrong button.

--
Added file: http://bugs.python.org/file27165/test-cases.py

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Roy Smith

Roy Smith added the comment:

We need to define the scope of what input strings will be accepted.  ISO-8601 
defines a lot of stuff which we may not wish to accept.

Do we want to accept both basic format (MMDD) and extended format 
(-MM-DD)?

Do we want to accept things like 1985-W15-5, which is (if I understand this 
correctly(), the 5th day of the 15th week of 1985 [section 4.1.4.2].

Do we want to accept [section 4.2.2.4], 23:20,8, which is 23 hours, 20 
minutes, 8 tenths of a minute.

I suspect most people who have been following the recent thread 
(https://groups.google.com/d/topic/comp.lang.python/Q2w4R89Nq1w/discussion) 
would say none of the above are needed.  All that's needed is if you have an 
existing datetime object, d1, you can do:

s = str(d1)
d2 = datetime.datetime(s)
assert d1 == d2

for all values of d1.

But, let's at least agree on that.  Or, in the alternative, agree on something 
else.  Then we know what we're shooting for.

--
nosy: +roysmith

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Alexander Belopolsky

Alexander Belopolsky added the comment:

On Sep 9, 2012, at 8:15 AM, Roy Smith rep...@bugs.python.org wrote:

 We need to define the scope of what input strings will be accepted.

Since it is easier to widen the domain of acceptable arguments than to narrow 
it in the future, I would say let's start by accepting str(x) only where x is 
date, time, timezone or datetime. I would leave out timedelta for now because 
it's str(x) does not resemble ISO at all. 

Either that or full ISO 8601. Anything in between is just too hard to explain.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Roy Smith

Roy Smith added the comment:

I see I mis-stated my example.  When I wrote:

s = str(d1)
d2 = datetime.datetime(s)
assert d1 == d2

what I really meant was:

s = d1.isoformat()
d2 = datetime.datetime(s)
assert d1 == d2

But, now I realize that while that is certainly an absolute lower bound, it's 
almost certainly not sufficient.  The most common use case I see on a daily 
basis is parsing strings that look like 2012-09-07T23:59:59+00:00.  This is 
also John Nagle's original use case from the cited mailing list thread:

 I want to parse standard ISO date/time strings such as
 2012-09-09T18:00:00-07:00

Datetime.isoformat() returns something that matches the beginning of that, but 
doesn't have the time zone offset.  And it's the offset that makes strptime() 
not usable as a soluation, because %z isn't portable.

If we don't satisfy the 2012-09-07T23:59:59+00:00 case, then we won't have 
really done anything useful.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread John Nagle

John Nagle added the comment:

For what parts of ISO 8601 to accept, there's a standard: RFC3339, Date and 
Time on the Internet: Timestamps.  See section 5.6:

   date-fullyear   = 4DIGIT
   date-month  = 2DIGIT  ; 01-12
   date-mday   = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
 ; month/year
   time-hour   = 2DIGIT  ; 00-23
   time-minute = 2DIGIT  ; 00-59
   time-second = 2DIGIT  ; 00-58, 00-59, 00-60 based on leap second
 ; rules
   time-secfrac= . 1*DIGIT
   time-numoffset  = (+ / -) time-hour : time-minute
   time-offset = Z / time-numoffset

   partial-time= time-hour : time-minute : time-second
 [time-secfrac]
   full-date   = date-fullyear - date-month - date-mday
   full-time   = partial-time time-offset

   date-time   = full-date T full-time

   NOTE: Per [ABNF] and ISO8601, the T and Z characters in this
  syntax may alternatively be lower case t or z respectively.

  ISO 8601 defines date and time separated by T.
  Applications using this syntax may choose, for the sake of
  readability, to specify a full-date and full-time separated by
  (say) a space character.

That's straightforward, and can be expressed as a regular expression.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Alexander Belopolsky

Alexander Belopolsky added the comment:

 I realize that while that is certainly an absolute lower bound,
 it's almost certainly not sufficient.  The most common use case
 I see on a daily basis is parsing strings that look like
 2012-09-07T23:59:59+00:00.

This is exactly what isoformat() of an aware datetime looks like:

 datetime.now(timezone.utc).isoformat()
'2012-09-09T16:09:46.165886+00:00'

str() is the same up to T replaced by space:

 print(datetime.now(timezone.utc))
2012-09-09 15:19:12.567692+00:00

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Alexander Belopolsky

Alexander Belopolsky added the comment:

 For what parts of ISO 8601 to accept, there's a standard: RFC3339

This is almost indistinguishable from the idea of accepting .isoformat() and 
str() results.  From what I see the only difference is that 't' is accepted for 
date/time separator and 'z' is accepted as a timezone.

Let's start with this.

As an ultimate solution, I would like to see something like codec registry so 
that we can do things like datetime(.., format='rfc3339') or date(.., 
format='gnu') for GNU parse_datetime.  I think this will look more pythonic 
than strptime().  Of course, strptime format can also be accepted as the value 
for the format keyword.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Jesús Cea Avión

Changes by Jesús Cea Avión j...@jcea.es:


--
nosy: +jcea

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-09 Thread Alexander Belopolsky

Changes by Alexander Belopolsky alexander.belopol...@gmail.com:


--
assignee:  - belopolsky

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-08 Thread Chris Rebert

Changes by Chris Rebert pyb...@rebertia.com:


--
nosy: +cvrebert

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread John Nagle

New submission from John Nagle:

The datetime module has support for output to a string of dates and times in 
ISO 8601 format (2012-09-09T18:00:00-07:00), with the object method 
isoformat([sep]).  But there's no support for parsing such strings.  A string 
to datetime class method should be provided, one capable of parsing at least 
the RFC 3339 subset of ISO 8601.

The problem is parsing time zone information correctly.
The allowed formats for time zone are
   empty   - no TZ, date/time is naive in the datetime sense
   Z   - zero, or Zulu time, i.e. UTC.
   [+-]nn.nn   - offset from UTC
   
strptime does not understand timezone offsets. The datetime documentation 
suggests that the z format directive handles time zone info, but that's not 
actually implemented for input.  

Pypi has four modules for parsing ISO 8601 dates. Each has least one major
problem in time zone handling:

iso8601 0.1.4   
   Abandonware.  Mishandles time zone when time zone is Z and
   the default time zone is specified. 
iso8601.py 0.1dev   
   Always returns a naive datetime object, even if zone specified.
iso8601plus 0.1.6   
   Fork of abandonware version above.  Same bug.
zc.iso8601 0.2.0
   Zope version.  Imports the pytz module with the full Olsen time zone
   database, but doesn't actually use that database.

Thus, nothing in Pypi provides a good alternative. 

It would be appropriate to handle this in the datetime module.  One small, 
correct, tested function would be better than the existing five bad 
alternatives.

--
components: Library (Lib)
messages: 169941
nosy: nagle
priority: normal
severity: normal
status: open
title: datetime cannot parse ISO 8601 dates and times
type: enhancement
versions: Python 2.6, Python 2.7, Python 3.1, Python 3.2, Python 3.3, Python 3.4

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread STINNER Victor

Changes by STINNER Victor victor.stin...@gmail.com:


--
nosy: +belopolsky

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread R. David Murray

Changes by R. David Murray rdmur...@bitdance.com:


--
versions:  -Python 2.6, Python 2.7, Python 3.1, Python 3.2, Python 3.3

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread R. David Murray

Changes by R. David Murray rdmur...@bitdance.com:


--
nosy: +r.david.murray

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread Alexander Belopolsky

Alexander Belopolsky added the comment:

%z format is supported, but it cannot accept colon in TZ offset.  It can parse 
offsets like -0600 just fine.  What OP is looking for is the GNU date %:z 
format which datetime does not support. 

For ISO 8601 compliance, however I think we need a way to specify a parser that 
will accept any valid 8601 format: with T or space separator and with or 
without : in time and timezone and with or without dashes in date. 

I would very much like such promiscuous parser to be implemented in 
datetime.__new__.  So that we can create datetime objects from strings the way 
we do it with numbers.

--
nosy: +Alexander.Belopolsky

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread Arfrever Frehtes Taifersar Arahesis

Changes by Arfrever Frehtes Taifersar Arahesis arfrever@gmail.com:


--
nosy: +Arfrever

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread John Nagle

John Nagle added the comment:

Re: %z format is supported.

That's platform-specific; the actual parsing is delegated to the C library.  
It's not in Python 2.7 / Win32:

  ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z'

It really shouldn't be platform-specific; the underlying platform is irrelevant 
to this task.  That's more of a documentation error; the features not common to 
all supported Python platforms should not be mentioned in the documentation.  

Re: I would very much like such promiscuous parser to be implemented in 
datetime.__new__. 

For string input, it's probably better to do this conversion in a specific 
class-level function.  Full ISO 8601 dates/times generally come from 
computer-generated data via a file or API.  If invalid text shows up, it should 
be detected as an error, not be heuristically interpreted as a date.  There's 
already fromtimestamp and fromordinal, 
and isoformat as an instance method, so fromisoformat seems reasonable.

I'd also suggest providing a standard subclass of tzinfo in datetime for fixed 
offsets.  That's needed to express the time zone information in an ISO 8601 
date. The new fromisoformat would convert an ISO 8601 date/time would be 
convertible to a time-zone aware datetime object.  If converted back to an 
ISO 8601 string with .isoformat(), the round trip should preserve the original 
data, including time zone offset.

(Several more implementations of this conversion have turned up.  In addition 
to the four already mentioned, there was one in xml.util, and one in 
feedparser. There are probably more yet to be found.)

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread Alexander Belopolsky

Alexander Belopolsky added the comment:

On Thu, Sep 6, 2012 at 9:51 PM, John Nagle rep...@bugs.python.org wrote:
 It's not in Python 2.7 / Win32.

Python 2.x series is closed and cannot accept new features.  Both %z
and fixed offset tzinfo subclass are implemented in 3.2.

--

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com



[issue15873] datetime cannot parse ISO 8601 dates and times

2012-09-06 Thread Alexander Belopolsky

Alexander Belopolsky added the comment:

I am attaching a quick python only prototype for the proposed feature.  My goal 
is to make date/time objects behave like numeric types for which constructors 
accept strings produced by str().  Since str() format is ISO 8601, it is 
natural to accept ISO 8601 formats in constructors.

--
keywords: +patch
Added file: http://bugs.python.org/file27141/issue15873-proto.diff

___
Python tracker rep...@bugs.python.org
http://bugs.python.org/issue15873
___
___
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com