0

私は最初のPythonスクリプトに取り組んでいます。このスクリプトは、さまざまな日時エントリを使用してオブジェクトを作成および更新します。

私は次のようにオブジェクトを設定しています:

# Date conversion
import datetime
import time

# 0:01:00 and 0:00:00 threshold and totalseconds
threshold = time.strptime('00:01:00,000'.split(',')[0],'%H:%M:%S')
tick = datetime.timedelta(hours=threshold.tm_hour,minutes=threshold.tm_min,seconds=threshold.tm_sec).total_seconds()
zero_time = datetime.timedelta(hours=0,minutes=0,seconds=0)
zero_tick = zero_time.total_seconds()
format_date = '%d/%b/%Y:%H:%M:%S'

from datetime import datetime

# Response object
class ResponseObject(object):
    def __init__(self, dict):
      self.__dict__ = dict

# JSON encoding
from json import JSONEncoder
class MyEncoder(JSONEncoder):
    def default(self, o):
      return o.__dict__

# > check for JSON response object
try:
   obj
except NameError:
    obj = ResponseObject({})

...
entry = "14/Nov/2012:09:32:31 +0100"
entry_tz = str.join(' ', entry.split(None)[1:6])
entry_notz = entry.replace(' '+entry_tz,'')
this_time = datetime.strptime(entry_notz, format_date)

# > add machine to object if not there, add init time
if not hasattr(obj, "SOFTINST"):
    #line-breaks for readability
    setattr(obj, "SOFTINST", {  
        "init":this_time,
        "last":this_time,
        "downtime":zero_time,
        "totaltime":"",
        "percentile":100
    })
... 
print this_time
print MyEncoder().encode({"hello":"bar"})
print getattr(obj, "SOFTINST")

私の最後の「印刷」はこれを返します:

{
  'totaltime': datetime.timedelta(0),
  'uptime': '',
  'last': datetime.datetime(2012, 11, 14, 9, 32, 31),
  'init': datetime.datetime(2012, 11, 14, 9, 32, 31),
  'percentile': 100, 
  'downtime': 0
}

JSONに変換できません...

理由がわかりません:

print this_time   #2012-11-14 09:32:31

ただし、オブジェクト内では、次のように格納されます

datetime.datetime(2012, 11, 14, 9, 32, 31)

質問:
日時オブジェクトを「文字列形式」で保存し、Pythonで簡単にアクセス(および変更)できるようにするにはどうすればよいですか?

ありがとう!

4

1 に答える 1

2

datetimeオブジェクトでisoformatメソッドを使用します。(参照:http ://docs.python.org/release/2.5.2/lib/datetime-datetime.htmlを参照)

于 2013-03-06T14:00:20.947 に答える