Obviously, it would be better if you knew where JSON came from, and you can look in the docs / ask the author / etc. to find out what the actual intent behind this date format is. (It can even be generated by Python code using a library that you can simply use on your own ...)
But looking at the numbers, I can pretty well guess what this means: 1405961743000 is milliseconds from the Unix era (which explains why you can use the first 10 digits as seconds since Unix, at least in a fairly wide range around 2014 years), and +0100 - the time zone offset from GMT, in the +HHMM format.
So, instead of extracting the first 10 digits, converting to int and calling fromtimestamp , you need to extract everything up to + or - , convert to int, divide by 1000 and call fromtimestamp . Although the fact that the only example you gave us has 0 milliseconds implies that they will have a good chance, in which case this difference will not matter ...
In any case, it is up to you what to do with the time zone offset. Do you want to store local date information? GMT datetimes? naive local dates? It’s very easy for them to get from the timestamp and the offset (although “conscious” will mean using a fake time zone, such as GMT-05: 00, which, of course, does not have any historical or DST information), but you have to decide which of them you need.
Whatever you do, you might consider expanding your JSON decoder to automate it, as shown in the examples in the docs . (Any string that matches the regular expression r'/Date\((\d+)([+-]\d{4})\)/' , the first group is the timestamp, and the second is the offset.)
But maybe not. Especially since parse_string does not seem excessive, at least with 3.4, so it seems you will have to defuse it. See this code. I hit together as a proof of concept; you can do it a little better, but there is a limit to how clean you can do it if they don't provide it with a hook ...
PS, if you ever distribute JSON yourself, you can consider a more standardized and self-documenting way to do this. The dict format shown in the json module docs, where you actually specify the constructor to call and the arguments to pass it, is a lot easier for people to figure out (and add a hook for). Or, alternatively, there is a quasi-standard way of encoding YAML formats as JSON formats, and YAML is extensible (and already has a standard temporary extension).