Более эффективный способ закодировать это? - PullRequest
0 голосов
/ 15 октября 2011

Я должен получить дату Excel 1 декабря 2011 года и какой это день недели и распечатать ее в этом формате.Дата Excel для четверга, 2011-дек-1: 40878. Мне удалось получить и то, и другое, но я не думаю, что мой метод определения дня с использованием операторов if - лучший подход.Это мой оригинальный файл сценария, поэтому, пожалуйста, прости грубость.Я проверил, и я знаю, что мое решение правильно.Моя единственная проблема - получить более эффективный способ получить день и любые предложения о том, как получить месяц в моем конечном результате.Мы еще не сделали модуль даты и времени, поэтому я не могу поэкспериментировать с этим.

вот мой код:

Year=2011
Month=12
Day=1



Y2=Year-1900
en=int((14-Month)/12)
Y3=Y2-en
m2=Month+12*


l=1+min(Y3,0)+int(Y3/4)-int(Y3/100)+int((Y3+300)/400)

d1=int(-1.63+(m2-1)*30.6)

import math

d2=math.floor(Day+Y3*365+l+d1) #d2 is the final excel date.


Day_Of_Week=((d2%7)-1) 

print "%s"%(d2)


if Day_Of_Week==0:


print "sun"

if Day_Of_Week ==1:
        print "mon"

if Day_Of_Week==2:
        print"tue"
if Day_Of_Week==3:
        print "wed"
if Day_Of_Week==4 :
        print "thur"
if Day_Of_Week==5:
        print "fri"
if Day_Of_Week==6:
        print "sat"

Любая помощь будет оценена по достоинству:)

Ответы [ 3 ]

4 голосов
/ 15 октября 2011

Как насчет:

days = ['sun', 'mon', 'tue', 'wed', 'thur', 'fri', 'sat']

print days[Day_Of_week]

Также взгляните на это: Как прочитать дату в формате Excel на Python?

0 голосов
/ 29 октября 2011

Спасибо за вашу помощь, я смог сделать это лучше, но не смог опубликовать его, пока наши задания не будут оценены.

Вот что я сделал:

from math import floor
def calcExcelDate(Year, Month,Day):
     Yr_Offset=Year-1900  #Determines year offset from starting point.
     Early_Mnth_Correctn=int((14-Month)/12)
     #Early month correction:makes the year have 14 months so the leap day is added at the end of the year
     DateCorrector=(Yr_Offset)-(Early_Mnth_Correctn) #Corrects Date
     MonthCorrector=Month+12*Early_Mnth_Correctn     #Corrects Month
     Leapyr_Calc=1+min(DateCorrector,0)+int(DateCorrector/4)-int(DateCorrector/100)+int ((DateCorrector+300)/400)
     #calculates no of leap years since starting point
     char=int(floor(-1.63+(MonthCorrector-1)*30.6))
     #determines the number of days preceding the given month in a non leap year.
     Excel_Date=(Day+DateCorrector*365+Leapyr_Calc+char )    
     Days=["Monday","Tuesday","Wednesday","Thursday","Friday","saturday","sunday"]
     Months=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]
     Offset=2
     dayNo=(Excel_Date-Offset)%7
     dayOfWk=Days[dayNo]
     return "The excel date of %r %r-%r-%r is %r"%(dayOfWk,Day,Months[Month-1],Year,Excel_Date)
0 голосов
/ 15 октября 2011

"" "Я должен получить дату Excel 1 декабря 2011 года" "": Нет такой вещи, как Дата Excel ". Есть two" системы дат, используемые в Excel, одна из которых имеет период в 1900 г. [по умолчанию в Windows Excel], а другая - 1904 г. [по умолчанию в Windows для Mac.

См. Документацию xlrd ;есть предварительный раздел о датах, и посмотрите функции, которые имеют xldate в своих именах.

>>> import xlrd
>>> xlrd.xldate.xldate_from_date_tuple((2011,12, 1), 0) # Windows origin
40878.0
>>> xlrd.xldate.xldate_from_date_tuple((2011,12, 1), 1) # Mac origin
39416.0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...