<div><div><div class="gmail_quote"><div>On Sat, 21 Oct 2017 at 16:08, Mario Corchero <<a href="mailto:mariocj89@gmail.com" target="_blank">mariocj89@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>Sorry, hit send by mistake on the previous message.</div><div><br><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span style="font-size:12.8px">That is fine for parsing, but my issue with this is symmetry with strftime.</span></blockquote></div><div><div><br>I can agree with having a %:z for support in strftime but I think that is a separate change. The issue I opened with the attached PR focused only in strptime to facilitate the discussion.</div></div></blockquote><div><br></div></div></div></div><div><div><div class="gmail_quote"><div>Yes, strftime is a separate issue, but still relevant as a design concern for any new changes to strptime.</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div></div></div></blockquote></div></div></div></div></blockquote></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"><div></div></div></blockquote></div></div></div></div></blockquote></div></div></blockquote><div><br></div><div>My revised proposal is this:</div><div><br></div><div>Add "%:z" with the following semantics:</div><div>1. Requires ":" separator </div><div>2. Officially matches the empty string, producing a naive datetime (tzinfo=None)</div><div>3. [maybe] officially matches "Z", equivalent to "+00:00"</div><div><br></div><div>For "%z", retain the existing semantics, with one extension</div><div>1. Does not require ":" (but silently accepts it)</div><div>2. Does not match the empty string</div><div><br></div><div>Here's why:</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote">[snip] Oren:</div></blockquote></div></div></div></div></blockquote></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_quote"></div></blockquote></div></div></div></div></blockquote></div></div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote"><div></div><div><br></div><div>You can say that the real source of the asymmetry here is not with my proposal but rather in the underlying strftime/strptime: on formatting, %z yields an empty string for a naive timestamp rather that producing an error. But on parsing, it refuses to parse a timestamp with no offset. A truly symmetric implementation would have accepted it as a naive timestamp. </div></div></div></blockquote></div></div></div></div></blockquote></div></div></blockquote></div></div></div><div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote"><div><br></div><div>Too late for %z because it must remain backward compatible, but perhaps %:z can be made to accept a missing offset as a naive timestamp. The user can then check for naive timestamp and reject them if they are unacceptable in that context, rather than specifying whether a missing timestamp is acceptable or not in the format string. I have no problem with either solution </div></div></div></blockquote></div></div></div></div></blockquote></div></div></blockquote></div></div></div><div><div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="gmail_quote"></div></div></blockquote></div></div></div></div></blockquote></div></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485HOEnZb"><div class="m_4184767596885752040m_-7140032684541405079m_-7682967723528725485h5"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail_quote"><div>[snip]</div></div></div></blockquote></div></div></div></div></blockquote></div></div></blockquote><div><br></div><div>A separate proposal:</div><div><br></div><div>Add "%.f" with the following semantics:</div><div>1. Offially matches empty string, producing a timestamp with 0 fraction. </div><div>2. Otherwise equivalent to ".%f"</div><div><br></div><div>Retracting proposal for "%?t" for now. </div><div><br></div><div>With these two extensions, an strptime format can be written that can parse and losslessly round-trip the output of datetime.__str__, or isoformat() with the default space separator for all possible datetime values, naive or aware, except those using custom tzinfo. </div><div><br></div><div>While not part of the proposal, these two extensions may also be naturally applied to strftime so that the same format string used for parsing will also produce an output identical to isoformat(), including naive timestamps and whole second timestamps.</div></div></div>
</div>