2009-03-31 42 views
1

場合によっては、self.startがunicode:Python:ユニコードのテストとtime()への変換

などです。 datetime.combineが

start = datetime.combine(self.job_record.date, self.start) 

を訴える作る

>>>self.start 
u'07:30:00' 

どのように行います:Unicodeの

  1. テスト?
  2. u'07:30:00 'からdatetime.timeに変換しますか?
+0

実際のエラーメッセージを追加します! – hop

答えて

2

datetime.combineは、2番目の引数が文字列(またはユニコード文字列)ではなくdatetime.timeインスタンスであると予想しているため、不平を言っています。

文字列をdatetime.timeインスタンスに変換する方法はいくつかあります。 1つの方法は、datetime.strptimeを使用することです:

t = datetime.strptime(self.start, "%H:%M:%S").time() 
start = datetime.combine(self.job_record.date, t) 
4

ユニコードのチェック:30:07に文字セットの文字が拡張されることはありませんと仮定すると

>>> import time 
>>> time.strptime(u'07:30:00', '%H:%M:%S') 
(1900, 1, 1, 7, 30, 0, 0, 1, -1) 
0

>>> import types 
>>> type(u'07:30:00') is types.UnicodeType 
True 
>>> type('regular string') is types.UnicodeType 
False 

は時間に文字列を変換する00' 、そして使用str(self.start)

時刻の数字が文字セット固有の可能性がある場合は、encode()と適切なerror引数指定子を使用してstringに変換します。

最初にstr()を試してみて、変換できないケース(許可ではなく許しを求める)を処理する場合は、exceptを使用してください。一方、変換しようとしている値のほとんどが失敗した場合は、関数を適用する前に変換してください。

脇に:combine関数は、datetime.dateオブジェクトとdatetime.timeオブジェクトを必要とします。実際に予測できない動作を避けたい場合は、ドキュメントで指定されたコントラクトを短絡するのではなく、datetimeオブジェクトを渡します。の前にcombineあなたのために推測するcombine

関連する問題