2012-06-26 61 views
34

Làm thế nào tôi có thể in năm tiếp theo nếu năm hiện tại được đưa ra trong python bằng cách sử dụng mã đơn giản nhất, có thể trong một dòng sử dụng mô-đun datetime.Làm thế nào để in năm tiếp theo từ năm hiện tại trong Python

+1

tôi sẽ lấy '2005' từ mã sau 'time.strftime ('% Y ', time.strptime (' 2005-11- 11 ','% Y-% m-% d '))' .. bây giờ những gì tôi cần là để có được '2006' mà không có nhiều thay đổi đối với mã này – Alchemist777

+1

'time.strptime ('2005-11-11', '% Y-% m-% d '). Tm_year + 1' – icecrime

+4

'print year + 1' – Matthias

Trả lời

101

Cả đối tượng ngày và giờ trong ngày đều có thuộc tính year, là một số. Chỉ cần thêm 1:

>>> from datetime import date 
>>> print date.today().year + 1 
2013 

Nếu bạn có năm hiện tại trong một biến, chỉ cần thêm 1 trực tiếp, không cần phải bận tâm với các mô-đun datetime:

>>> year = 2012 
>>> print year + 1 
2013 

Nếu bạn có ngày trong một chuỗi , chỉ cần chọn 4 chữ số mà đại diện cho năm và vượt qua nó để int:

>>> date = '2012-06-26' 
>>> print int(date[:4]) + 1 
2013 

năm số học là cực kỳ đơn giản, làm cho nó một số nguyên và chỉ cần thêm 1. nó không nhận được nhiều đơn giản r hơn thế.

Tuy nhiên, nếu bạn đang làm việc với một ngày toàn bộ, và bạn cần phải cùng ngày nhưng một năm sau đó, sử dụng các thành phần để tạo ra một đối tượng date mới với năm tăng thêm một:

>>> today = date.today() 
>>> print date(today.year + 1, today.month, today.day) 
2013-06-26 

hoặc bạn có thể sử dụng .replace chức năng, mà trả về một bản sao với lĩnh vực bạn chỉ định thay đổi:

>>> print today.replace(year=today.year + 1) 
2013-06-26 

Lưu ý rằng điều này có thể có được một chút khó khăn khi today là ngày 29 tháng 2 trong một năm nhuận. Cách chính xác, tuyệt đối không an toàn để làm việc này là:

def nextyear(dt): 
    try: 
     return dt.replace(year=dt.year+1) 
    except ValueError: 
     # February 29th in a leap year 
     # Add 365 days instead to arrive at March 1st 
     return dt + timedelta(days=365) 
+1

Hàm' .replace' sẽ không hoạt động đáng tin cậy. 'd = date (2012, 2, 29)' 'd.replace (year = d.year + 1)' ném 'ValueError: ngày nằm ngoài phạm vi cho tháng' và không phải tùy chọn trước của bạn để tạo đối tượng ngày tháng mới xử lý trường hợp này. – Duncan

+0

@Duncan: đẹp nhất; câu hỏi là sau đó, 29 tháng 2 năm sau là gì? Ngày 1 tháng 3? –

+2

Thường là ngày 1 tháng 3 nhưng có thể có ngoại lệ. Nếu bạn lấy một trái phiếu 1 năm vào ngày 29 tháng 2 thì tôi nghĩ nó sẽ đáo hạn vào ngày 1 tháng 3 năm sau. Tất nhiên một khi bạn nhận được vào tính toán tiền nó thực sự sẽ trưởng thành vào ngày làm việc đầu tiên đó là ít nhất một năm nghỉ bỏ qua cuối tuần và ngày lễ ngân hàng. – Duncan

Các vấn đề liên quan