Why does python's datetime.datetime.strptime('201412', '%Y%m%d') not raise a ValueError?
<p>In the format I am given, the date 2014-01-02 would be represented by "20140102".  This is correctly parsed with the standard strptime:</p>

<pre><code>&gt;&gt;&gt; datetime.datetime.strptime("20140102", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
</code></pre>

<p>In this format, "201412" would <em>not</em> be a valid date.  The <a href="https://docs.python.org/2/library/time.html">docs</a> say that the "%m" directive is "Month as a zero-padded decimal number."    It gives as examples "01, 02, ..., 12".  The days directive "%d" is also supposed to be  zero-padded.</p>

<p>Based on this, I expected that "201412" would be an invalid input with this format, so would raise a ValueError.  Instead, it is interpreted as 2014-01-02:</p>

<pre><code>&gt;&gt;&gt; datetime.datetime.strptime("201412", "%Y%m%d")
datetime.datetime(2014, 1, 2, 0, 0)
</code></pre>

<p>The question is: is there a way to specify "no seriously zero-padded only"?  Or am I misunderstanding the term "zero-padded" in this context?</p>

<p>Note that the question is not about how to parse dates in this format, but about understanding the behavior of strptime.</p>

<p>This is pretty tricky, but it sounds like <code>strptime</code> just tries to match the string as closely as possible. Python's <code>strptime</code> is the same as C's <code>strptime</code>, and the docs say that padding is optional:</p>

<blockquote>
  <p>is the month number [1,12]; leading zeros are permitted but not
  required.</p>
</blockquote>

<p><a href="http://pubs.opengroup.org/onlinepubs/7908799/xsh/strptime.html" rel="nofollow">http://pubs.opengroup.org/onlinepubs/7908799/xsh/strptime.html</a></p>

python datetime strptime