2016-08-04 9 views
0

私はdatetime形式に変換したい値を与える単純なPyQt GUIを持っています。Python整数をdatetimeに変換する方法

私はそれがここ

2010,1,1 

を印刷したいのに対し現時点では

201011 

印刷され、対応するPythonコードは、

*timer.py 
from PyQt4 import QtCore, QtGui 

try: 
    _fromUtf8 = QtCore.QString.fromUtf8 
except AttributeError: 
    def _fromUtf8(s): 
     return s 

try: 
    _encoding = QtGui.QApplication.UnicodeUTF8 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig, _encoding) 
except AttributeError: 
    def _translate(context, text, disambig): 
     return QtGui.QApplication.translate(context, text, disambig) 

class Ui_Dialog(object): 
    def setupUi(self, Dialog): 

     Dialog.setObjectName(_fromUtf8("Dialog")) 
     Dialog.resize(510, 129) 
     self.gridLayout = QtGui.QGridLayout(Dialog) 
     self.gridLayout.setObjectName(_fromUtf8("gridLayout")) 
     self.frame = QtGui.QFrame(Dialog) 
     self.frame.setFrameShape(QtGui.QFrame.StyledPanel) 
     self.frame.setFrameShadow(QtGui.QFrame.Raised) 
     self.frame.setObjectName(_fromUtf8("frame")) 
     self.gridLayout_2 = QtGui.QGridLayout(self.frame) 
     self.gridLayout_2.setObjectName(_fromUtf8("gridLayout_2")) 
     self.yearlabel = QtGui.QLabel(self.frame) 
     self.yearlabel.setObjectName(_fromUtf8("yearlabel")) 
     self.gridLayout_2.addWidget(self.yearlabel, 0, 0, 1, 1) 
     self.monthfromcomboBox = QtGui.QComboBox(self.frame) 
     self.monthfromcomboBox.setObjectName(_fromUtf8("monthfromcomboBox")) 
     self.gridLayout_2.addWidget(self.monthfromcomboBox, 1, 2, 1, 2) 
     self.label_2 = QtGui.QLabel(self.frame) 
     self.label_2.setObjectName(_fromUtf8("label_2")) 
     self.gridLayout_2.addWidget(self.label_2, 0, 4, 1, 1) 
     self.SearchButton = QtGui.QPushButton(self.frame) 
     self.SearchButton.setObjectName(_fromUtf8("SearchButton")) 
     self.gridLayout_2.addWidget(self.SearchButton, 2, 4, 1, 2) 
     self.yearfromcomboBox = QtGui.QComboBox(self.frame) 
     self.yearfromcomboBox.setObjectName(_fromUtf8("yearfromcomboBox")) 
     self.gridLayout_2.addWidget(self.yearfromcomboBox, 1, 0, 1, 2) 
     self.dayfromcomboBox = QtGui.QComboBox(self.frame) 
     self.dayfromcomboBox.setObjectName(_fromUtf8("dayfromcomboBox")) 
     self.gridLayout_2.addWidget(self.dayfromcomboBox, 1, 4, 1, 2) 
     self.label = QtGui.QLabel(self.frame) 
     self.label.setObjectName(_fromUtf8("label")) 
     self.gridLayout_2.addWidget(self.label, 0, 2, 1, 1) 
     self.gridLayout.addWidget(self.frame, 0, 0, 1, 1) 

     self.retranslateUi(Dialog) 
     QtCore.QMetaObject.connectSlotsByName(Dialog) 
     Dialog.setTabOrder(self.yearfromcomboBox, self.monthfromcomboBox) 
     Dialog.setTabOrder(self.monthfromcomboBox, self.dayfromcomboBox) 

    def retranslateUi(self, Dialog): 
     Dialog.setWindowTitle(_translate("Dialog", "Dialog", None)) 
     self.yearlabel.setText(_translate("Dialog", "Year", None)) 
     self.label_2.setText(_translate("Dialog", "Day", None)) 
     self.SearchButton.setText(_translate("Dialog", "Go", None)) 
     self.label.setText(_translate("Dialog", "Month", None)) 

、PyQtはコードされ

ここ
+0

ここで変更しないのはなぜでしょう: 'nowdate = int( '%d%d%d'%(nowyear、nowmonth、nowday))'なぜ、整数として必要なのですか? 'mktime()'より普遍的な価値、すなわちエポックからの時間にするhttps://docs.python.org/2/library/time.html?highlight=time#time.mktime –

答えて

0

このコードは、先行ゼロを処理するために再定義され

from datetime import datetime 

date_int = 201011 
date = datetime.strptime(str(date_int), '%Y%m%d') 
print '{},{},{}'.format(date.year, date.month, date.day) 

2010,1,1

+0

それは素晴らしいです。しかし、次のように使用するために、X = '{}、{}、{}'。format(date.year、date.month、date.day)を整数に変換するにはどうすればよいでしょうか: "BATS.L"、 "yahoo" 、datetime(X)、datetime(2016,8,8))? –

0

は私のソリューションです:

dateNum = 201011 

dateNum = str(dateNum) 

year = dateNum[:4] 
monthDay = dateNum[4:] 

if len(monthDay) == 2: 
    day = monthDay[1:] 
    month = monthDay[:1] 

print(year + "," + month + "," + day) 

この意志出力:あるべき

2014111:

2010,1,1 

このコードの唯一の問題は、次のような日付を決定できないということです11月1日ですが、1月11日になる可能性もあります。

先行ゼロを含むマット? (20141101、2014年11月1日)

誰かがこれを判断する方法があります。しかし、私は論理的には、どちらか一方を決めるのが不可能だと思います。私はdatetime.datetime.strptimeを使用することをお勧めしたい

dateNum = 20100101 

dateNum = str(dateNum) 

year = dateNum[:4] 
monthDay = dateNum[4:] 

day = monthDay[2:] 
month = monthDay[:2] 

print(year + "," + month + "," + day) 

2010,01,01

0

実際に何かの整数が必要ない場合は、日付部分を文字列に変換し、次に1つの整数に変換する理由はありません。この行を削除してください:

nowdate = int('%d%d%d' %(nowyear,nowmonth,nowday)) 

代わりに、必要に応じて個別の日付コンポーネントを使用してください。 print nowyear, nowmonth, nowday(これはスペースで区切られて印刷されます)、または後で使用できるdatetimeモジュールから何かを作成する(またはさまざまな形式で印刷する)ようなもっと複雑な処理を行うことができます。

出力を取得するには、具体的に('2010,1,1')をリクエストしてください。既存のコードにかなり近づけることができます。 print '%d,%d,%d' % (nowyear, nowmonth, nowday)を使用するか、より新しいstr.format構文を使用する場合は、print '{:d},{:d},{:d}'.format(nowyear, nowmonth, nowday)を使用してください。1桁の月または日に2文字を使用するようにしたい場合は、書式文字列に%02dまたは{:02d}を使用して、ゼロパディングを2の幅に要求できます。

関連する問題