title: Python3.5 object and json.dumps() output
body: <p>I wrote a class that would allow me to add days (integers) to dates (string %Y-%m-%d). The objects of this class need to be JSON serializable. </p>
  
  <p>Adding days in the form of integers to my objects works as expected. However json.dumps(obj) returns too much info ("2016-03-23 15:57:47.926362") for my original object. <strong>Why ?</strong> How would I need to modify the class to get ""2016-03-23" instead ? Please see the example below.</p>
  
  <p><strong>Code:</strong></p>
  
  <pre><code>from datetime import datetime, timedelta
  import json
  
  class Day(str):
      def __init__(self, _datetime):
          self.day = _datetime
  
      def __str__(self):
          return self.day.date().isoformat()
  
      def __repr__(self):
          return "%s" % self.day.date().isoformat()
  
      def __add__(self, day):
          new_day = self.day + timedelta(days=day)
          return Day(new_day).__str__()
  
      def __sub__(self, day):
          new_day = self.day - timedelta(days=day)
          return Day(new_day).__str__()
  
  
  if __name__ == "__main__":
      today = Day(datetime.today())
      print(today)               # 2016-03-23
      print(json.dumps(today))   # "2016-03-23 15:57:47.926362"
      print(today+1)             # 2016-03-24
      print(json.dumps(today+1)) # "2016-03-24"
      print(today-1)             # 2016-03-22
      print(json.dumps(today-1)) # "2016-03-22"
  </code></pre>
  
  <hr>
  
  <p><strong>Update</strong>. Here's my final code for those interested:</p>
  
  <pre><code>from datetime import datetime, timedelta
  import json
  
  
  class Day(str):
      def __init__(self, datetime_obj):
          self.day = datetime_obj
  
      def __new__(self, datetime):
          return str.__new__(Day, datetime.date().isoformat())
  
      def __add__(self, day):
          new_day = self.day + timedelta(days=day)
          return Day(new_day)
  
      def __sub__(self, day):
          new_day = self.day - timedelta(days=day)
          return Day(new_day)
  
  
  if __name__ == "__main__":
      today = Day(datetime.today())
      print(type(today))
      print(today)  # 2016-03-23
      print(json.dumps(today))  # "2016-03-23"
      print(today + 1)  # 2016-03-24
      print(json.dumps(today + 1))  # "2016-03-24"
      print(today - 1)  # 2016-03-22
      print(json.dumps(today - 1))  # "2016-03-22"
      print(json.dumps(dict(today=today))) # {"today": "2016-03-23"}
      print(json.dumps(dict(next_year=today+365))) # {"next_year": "2017-03-23"}
      print(json.dumps(dict(last_year=today-366))) # {"last_year": "2015-03-23"}
  </code></pre>