2017-01-27 5 views
0

Ich lese einige Parameter Daten aus einer CSV und ich kämpfen, um das Datum zu konvertieren, so dass sie von der Klasse Date akzeptiert wird()convert String in quantlib Date()

Ich habe versucht, dass:

d = datetime.date(datetime.strptime('2011-03-07','%Y-%m-%d')) 
Date(d) 

aber es gibt:

NotImplementedError: Wrong number or type of arguments for overloaded function 'new_Date'.

+1

Was ist 'Date'? – poke

+0

Mögliches Duplikat von [Zeichenfolge in Datetime konvertieren] (http://stackoverflow.com/questions/466345/converting-string-into-datetime) – rsp

+0

Quantlib Date() – ulrich

Antwort

2

QuantLib stellt eine DateParser Klasse zur Verfügung, die die Aufgabe erfüllt, ohne durch datetime zu gehen; Sie können schreiben

d = DateParser.parseFormatted('2011-03-07','%Y-%m-%d') 

, um Ihre Date Instanz zu erhalten. Dies funktioniert auch in C++, wo Sie

Date d = DateParser::parseFormatted('2011-03-07','%Y-%m-%d') 

oder in anderen Sprachen zu denen QuantLib exportiert wird durch SWIG schreiben würde.

+0

Wenn Sie bereits eine 'datetime' -Instanz haben, verwenden Sie stattdessen merlin2011 Antwort ist natürlich der Weg zu gehen. –

3

Die quantlib documentation schlägt vor, dass Sie in den folgenden Argumenten werden geben sollte, anstatt eine Python datetime.

Date (Day d, Month m, Year y) 

Es scheint keinen Python-API-Dokumentation im Moment zu sein, aber nach this answer, paßt es die C++, dann sollte es funktioniert einfach für jeden Wert in ganzen Zahlen zu übergeben. Das heißt, Sie in den folgenden Argumenten für 3. März 2011.

Date(3, 3, 2011) 

Zum Konvertieren von der Zeichenfolge übergeben würde, könnten Sie entweder manuell die Zeichenfolge analysieren, oder die Datetime-Klasse verwenden, wie Sie getan haben.

d = datetime.strptime('2011-03-07','%Y-%m-%d') 
quantDate = Date(d.day, d.month, d.year) 
2

Mit dem Modul dateutil prüfen.

from dateutil import parser 

parser.parse('2011-03-07') 
# datetime.datetime(2011, 3, 7, 0, 0) 
0

Ihr Code ist falsch.

Ändern Sie diese Zeile: d = datetime.date(datetime.strptime('2011-03-07','%Y-%m-%d'))

dazu: datetime.datetime.strptime(date_text, '%Y-%m-%d')

Es ist eine kleine Veränderung, aber helfen sollte.