Python:日期转换

时间:2016-03-20 19:48:12

标签: python string python-3.x while-loop

我的中期项目的一部分是将日期(月和日)转换为它的数字日(1-366,包括闰年),但我不确定如何做到这一点。我不知道如何使它工作,我也不知道如何制作它所以你只能投入有效的月份(即错误,确保1月大写。)

以下是我到目前为止所做的工作。

#Months
January=0
February=31
March=60
April=91
May=121
June=152
July=182
August=213
September=244
October=274
November=305
December=335

#Title
print("Convert: Date to day and day to date.")

#user inputs a date
month=input("\nPick a Month (Make sure to capitalize the first letter): ")

day=int(input("Pick the day of the date you wish to input: "))
if day<0 or day>31:
    print("Error, no months have greater than 31 days or less than 1 day.")

请帮忙。过去几天我一直在研究这个问题,但仍然无法弄清楚如何去做。

4 个答案:

答案 0 :(得分:1)

<强>代码:

_DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def _is_leap(year):
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

def _days_in_month(year, month):
    if month == 2 and _is_leap(year):
        return 29
    return _DAYS_IN_MONTH[month]

def days(year, month, day):
    return sum([_days_in_month(year, m) for m in range(0, month)]) + day

d = days(1992, 4, 14)
print(d)

<强>输出:

132

通过创建一些简单的函数可以轻松完成:

  1. 创建一个月内每个天数的list
  2. 创建一个函数以查看它是否是闰年。
  3. 创建一个利用我们刚刚制作的is_leapyear函数的函数,以告诉您闰年或正常年份中该月的天数。
  4. 创建一个功能,告诉我们在该月和日之前已经过去的天数。它的工作原理是:
    • 创建列表推导,返回截至该月的每个日期的列表。
    • 将当月经过的天数加到前几个月的所有天数之和。

答案 1 :(得分:1)

_DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]

def _is_leap(year):
    return year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)

def _days_in_month(year, month):
    if month == 2 and _is_leap(year):
        return 29
    return _DAYS_IN_MONTH[month]

def days(year, month, day):
    return sum([_days_in_month(year, m) for m in range(0, month)]) + day

d = days(1992, 4, 14)
print(d)

因为range()从0开始,0是一月,1是二月,所以month == 1而不是month == 2是不是?

答案 2 :(得分:0)

我不确定这个程序是在制作什么,我不知道在哪里使用了几个月。但是,如果您的问题是如何将用户输入的第一个字母大写,或者如果您的程序期望它,甚至确保拥有它,请尝试:

month = raw_input("\nPick a Month (Make sure to capitalize the first letter): ")
month = month[:1].capitalize() + month[1:]

月份的第一封信将大写。

答案 3 :(得分:0)

我对Python不是很有经验,所以不要指望它像魅力一样工作,并希望有一些改进空间可供使用。但是,我在我的电脑上试过这个,结果很好。我将尝试使此代码更有效,并稍后发布。

我不确定此代码是否适用于您的目的,但我使用了您给我的内容。

你也可能想提示用户输入一年来确定代码是否正在寻找一年或闰年的日期,但我不确定你是否想要这样,所以我现在就把它留下来。在此代码中,您可以输入您想要的月份。

如果您只想打印输入日期所在年份的天数,那么您可能需要尝试以下内容(此程序也会在错误答案时退出):

$(document).ready(function() {  
$('.store').each (function(){//do it for every class .store
    var $this = $(this); //get this object

    $this.on('change', function(){ //when this change...
          var searchValue = this.value; //assign the input to a variable
                if (searchValue != ''){ //if the variable is not emprty
                      $.post('stores.php',{'term' : searchValue}, function(data) { //check and return data in alert

                            if (data.length < 10){ // if number not in db, green
                                $this.css({'border' : 'solid 4px #17BC17'}); 
                            }

                            var resultAlert = '';
                            var jsonData = $.parseJSON(data);
                            $.each(jsonData, function(k, v){
                                resultAlert += '[' + v.cityID + '] ' + v.cityname + ' ' + v.value + '\n';
                            }); //each

                            alert('ALERT!' + '\n' + 'store in other cities' + '\n' + searchValue + ': ' + '\n'  + resultAlert );
                            $this.css({'border' : 'solid 4px #FFCC11'}); // if in db, yellow
                      });// post
                }//close if

                if (searchValue == ''){ //if the variable is empty, this turn green, if you delete a yellow number
                    $this.css({'border' : ''}); 
                }


    }); //close on change  
});//close .each