2012-03-17 31 views
12

Tôi đang tạo mô-đun trong python, trong đó tôi nhận ngày ở định dạng số nguyên như 20120213, có nghĩa là ngày 13 tháng 2 năm 2012. Bây giờ, tôi muốn chuyển đổi ngày định dạng số nguyên này thành đối tượng ngày tháng trăn.Làm thế nào để chuyển đổi số nguyên thành python đối tượng ngày?

Ngoài ra, nếu có bất kỳ phương tiện nào tôi có thể trừ/thêm số ngày trong ngày được định dạng nguyên đó để nhận được giá trị ngày ở cùng định dạng? như trừ 30 ngày từ 20120213 và nhận câu trả lời là 20120114?

Trả lời

13

tôi sẽ đề nghị các phương pháp đơn giản sau đây để chuyển đổi:

from datetime import datetime, timedelta 
s = "20120213" 
# you could also import date instead of datetime and use that. 
date = datetime(year=int(s[0:4]), month=int(s[4:6]), day=int(s[6:8])) 

Để thêm/trừ một lượng tùy ý ngày (. Giây làm việc quá btw), bạn có thể làm như sau:

date += timedelta(days=10) 
date -= timedelta(days=5) 

Và chuyển đổi lại bằng cách sử dụng:

s = date.strftime("%Y%m%d") 

Để chuyển đổi ERT số nguyên vào một chuỗi một cách an toàn, sử dụng:

s = "{0:-08d}".format(i) 

này đảm bảo rằng chuỗi của bạn là dài Tám charecters và trái độn với zero, ngay cả khi năm là nhỏ hơn so với 1000 (năm tiêu cực có thể trở thành hài hước mặc dù).

Tham khảo thêm: datetime objects, timedelta objects

+0

thnx :) Happy Coding ... – Uday0119

+0

nhưng những gì tôi nhận được không phải là một chuỗi. số nguyên của nó là – Uday0119

+1

cũng không khó, bạn có thể sử dụng str (x) để chuyển đổi số nguyên thành một chuỗi. – Peter

14

Câu hỏi này đã được trả lời, nhưng vì lợi ích của những người khác nhìn vào câu hỏi này, tôi muốn thêm các gợi ý sau: Thay vì làm slicing mình như gợi ý ở trên bạn cũng có thể sử dụng strptime() là (IMHO) dễ đọc hơn và có lẽ là cách ưu tiên để thực hiện chuyển đổi này.

import datetime 
s = "20120213" 
s_datetime = datetime.datetime.strptime(s, '%Y%m%d') 
2

Dưới đây là những gì tôi tin trả lời câu hỏi (Python 3, với kiểu gợi ý):

from datetime import date 


def int2date(argdate: int): 
    """ 
    If you have date as an integer, use this method to obtain a datetime.date object. 

    Parameters 
    ---------- 
    argdate : int 
     Date as a regular integer value (example: 20160618) 

    Returns 
    ------- 
    dateandtime.date 
     A date object which corresponds to the given value `argdate`. 
    """ 
    year = int(argdate/10000) 
    month = int((argdate % 10000)/100) 
    day = int(argdate % 100) 

    return date(year, month, day) 


print(intdate2date(20160618)) 

Đoạn mã trên tạo ra dự kiến ​​2016-06-18.

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