Trong bài viết này, bạn sẽ học cách thao tác ngày và giờ trong Python với sự trợ giúp của các ví dụ.
Python có một mô-đun có tên datetime để làm việc với ngày và giờ. Hãy tạo một vài chương trình đơn giản liên quan đến ngày và giờ trước khi tìm hiểu sâu hơn.
Ví dụ 1: Lấy ngày và giờ hiện tại
import datetime datetime_object = datetime.datetime.now() print(datetime_object)
Khi bạn chạy chương trình, kết quả đầu ra sẽ như sau:
2018-12-19 09: 26: 03.478039
Ở đây, chúng tôi đã nhập mô-đun datetime bằng import datetime
câu lệnh.
Một trong các lớp được định nghĩa trong datetime
mô-đun là datetime
lớp. Sau đó, chúng tôi sử dụng now()
phương thức để tạo một datetime
đối tượng chứa ngày và giờ cục bộ hiện tại.
Ví dụ 2: Lấy ngày hiện tại
import datetime date_object = datetime.date.today() print(date_object)
Khi bạn chạy chương trình, kết quả đầu ra sẽ như sau:
2018-12-19
Trong chương trình này, chúng ta đã sử dụng today()
phương thức được định nghĩa trong date
lớp để lấy một date
đối tượng chứa ngày cục bộ hiện tại.
Có gì bên trong datetime?
Chúng ta có thể sử dụng hàm dir () để lấy danh sách chứa tất cả các thuộc tính của một module.
import datetime print(dir(datetime))
Khi bạn chạy chương trình, đầu ra sẽ là:
('MAXYEAR', 'MINYEAR', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_divide_and_round', 'date', ' datetime ',' datetime_CAPI ',' time ',' timedelta ',' timezone ',' tzinfo ')
Các lớp thường được sử dụng trong mô-đun datetime là:
- ngày lớp
- thời gian lớp
- lớp datetime
- lớp học thời gian
Lớp datetime.date
Bạn có thể khởi tạo date
các đối tượng từ date
lớp. Đối tượng date đại diện cho một ngày (năm, tháng và ngày).
Ví dụ 3: Đối tượng ngày để biểu thị một ngày
import datetime d = datetime.date(2019, 4, 13) print(d)
Khi bạn chạy chương trình, đầu ra sẽ là:
2019-04-13
Nếu bạn đang thắc mắc, date()
trong ví dụ trên là một hàm tạo của date
lớp. Hàm tạo nhận ba đối số: năm, tháng và ngày.
Biến a là một date
đối tượng.
Chúng tôi chỉ có thể nhập date
lớp từ datetime
mô-đun. Đây là cách thực hiện:
from datetime import date a = date(2019, 4, 13) print(a)
Ví dụ 4: Lấy ngày hiện tại
Bạn có thể tạo một date
đối tượng có chứa ngày hiện tại bằng cách sử dụng phương pháp phân lớp có tên today()
. Đây là cách thực hiện:
from datetime import date today = date.today() print("Current date =", today)
Ví dụ 5: Lấy ngày từ dấu thời gian
Chúng ta cũng có thể tạo date
các đối tượng từ dấu thời gian. Dấu thời gian Unix là số giây từ một ngày cụ thể đến ngày 1 tháng 1 năm 1970 theo giờ UTC. Bạn có thể chuyển đổi dấu thời gian thành ngày tháng bằng fromtimestamp()
phương pháp.
from datetime import date timestamp = date.fromtimestamp(1326244364) print("Date =", timestamp)
Khi bạn chạy chương trình, đầu ra sẽ là:
Ngày = 2012-01-11
Ví dụ 6: In năm, tháng và ngày hôm nay
We can get year, month, day, day of the week etc. from the date object easily. Here's how:
from datetime import date # date object of today's date today = date.today() print("Current year:", today.year) print("Current month:", today.month) print("Current day:", today.day)
datetime.time
A time object instantiated from the time
class represents the local time.
Example 7: Time object to represent time
from datetime import time # time(hour = 0, minute = 0, second = 0) a = time() print("a =", a) # time(hour, minute and second) b = time(11, 34, 56) print("b =", b) # time(hour, minute and second) c = time(hour = 11, minute = 34, second = 56) print("c =", c) # time(hour, minute, second, microsecond) d = time(11, 34, 56, 234566) print("d =", d)
When you run the program, the output will be:
a = 00:00:00 b = 11:34:56 c = 11:34:56 d = 11:34:56.234566
Example 8: Print hour, minute, second and microsecond
Once you create a time
object, you can easily print its attributes such as hour, minute etc.
from datetime import time a = time(11, 34, 56) print("hour =", a.hour) print("minute =", a.minute) print("second =", a.second) print("microsecond =", a.microsecond)
When you run the example, the output will be:
hour = 11 minute = 34 second = 56 microsecond = 0
Notice that we haven't passed microsecond argument. Hence, its default value 0
is printed.
datetime.datetime
The datetime
module has a class named dateclass
that can contain information from both date and time objects.
Example 9: Python datetime object
from datetime import datetime #datetime(year, month, day) a = datetime(2018, 11, 28) print(a) # datetime(year, month, day, hour, minute, second, microsecond) b = datetime(2017, 11, 28, 23, 55, 59, 342380) print(b)
When you run the program, the output will be:
2018-11-28 00:00:00 2017-11-28 23:55:59.342380
The first three arguments year, month and day in the datetime()
constructor are mandatory.
Example 10: Print year, month, hour, minute and timestamp
from datetime import datetime a = datetime(2017, 11, 28, 23, 55, 59, 342380) print("year =", a.year) print("month =", a.month) print("hour =", a.hour) print("minute =", a.minute) print("timestamp =", a.timestamp())
When you run the program, the output will be:
year = 2017 month = 11 day = 28 hour = 23 minute = 55 timestamp = 1511913359.34238
datetime.timedelta
A timedelta
object represents the difference between two dates or times.
Example 11: Difference between two dates and times
from datetime import datetime, date t1 = date(year = 2018, month = 7, day = 12) t2 = date(year = 2017, month = 12, day = 23) t3 = t1 - t2 print("t3 =", t3) t4 = datetime(year = 2018, month = 7, day = 12, hour = 7, minute = 9, second = 33) t5 = datetime(year = 2019, month = 6, day = 10, hour = 5, minute = 55, second = 13) t6 = t4 - t5 print("t6 =", t6) print("type of t3 =", type(t3)) print("type of t6 =", type(t6))
When you run the program, the output will be:
t3 = 201 days, 0:00:00 t6 = -333 days, 1:14:20 type of t3 = type of t6 =
Notice, both t3 and t6 are of type.
Example 12: Difference between two timedelta objects
from datetime import timedelta t1 = timedelta(weeks = 2, days = 5, hours = 1, seconds = 33) t2 = timedelta(days = 4, hours = 11, minutes = 4, seconds = 54) t3 = t1 - t2 print("t3 =", t3)
When you run the program, the output will be:
t3 = 14 days, 13:55:39
Here, we have created two timedelta
objects t1 and t2, and their difference is printed on the screen.
Example 13: Printing negative timedelta object
from datetime import timedelta t1 = timedelta(seconds = 33) t2 = timedelta(seconds = 54) t3 = t1 - t2 print("t3 =", t3) print("t3 =", abs(t3))
When you run the program, the output will be:
t3 = -1 day, 23:59:39 t3 = 0:00:21
Example 14: Time duration in seconds
You can get the total number of seconds in a timedelta object using total_seconds()
method.
from datetime import timedelta t = timedelta(days = 5, hours = 1, seconds = 33, microseconds = 233423) print("total seconds =", t.total_seconds())
When you run the program, the output will be:
total seconds = 435633.233423
You can also find sum of two dates and times using +
operator. Also, you can multiply and divide a timedelta
object by integers and floats.
Python format datetime
The way date and time is represented may be different in different places, organizations etc. It's more common to use mm/dd/yyyy
in the US, whereas dd/mm/yyyy
is more common in the UK.
Python has strftime()
and strptime()
methods to handle this.
Python strftime() - datetime object to string
The strftime()
method is defined under classes date
, datetime
and time
. The method creates a formatted string from a given date
, datetime
or time
object.
Example 15: Format date using strftime()
from datetime import datetime # current date and time now = datetime.now() t = now.strftime("%H:%M:%S") print("time:", t) s1 = now.strftime("%m/%d/%Y, %H:%M:%S") # mm/dd/YY H:M:S format print("s1:", s1) s2 = now.strftime("%d/%m/%Y, %H:%M:%S") # dd/mm/YY H:M:S format print("s2:", s2)
When you run the program, the output will be something like:
time: 04:34:52 s1: 12/26/2018, 04:34:52 s2: 26/12/2018, 04:34:52
Here, %Y
, %m
, %d
, %H
etc. are format codes. The strftime()
method takes one or more format codes and returns a formatted string based on it.
In the above program, t, s1 and s2 are strings.
%Y
- year (0001,… , 2018, 2019,… , 9999)%m
- month (01, 02,… , 11, 12)%d
- day (01, 02,… , 30, 31)%H
- hour (00, 01,… , 22, 23%M
- minute (00, 01,… , 58, 59)%S
- second (00, 01,… , 58, 59)
To learn more about strftime()
and format codes, visit: Python strftime().
Python strptime() - string to datetime
The strptime()
method creates a datetime
object from a given string (representing date and time).
Example 16: strptime()
from datetime import datetime date_string = "21 June, 2018" print("date_string =", date_string) date_object = datetime.strptime(date_string, "%d %B, %Y") print("date_object =", date_object)
When you run the program, the output will be:
date_string = 21 June, 2018 date_object = 2018-06-21 00:00:00
The strptime()
method takes two arguments:
- một chuỗi đại diện cho ngày và giờ
- mã định dạng tương đương với đối số đầu tiên
Nhân tiện %d
, %B
và %Y
mã định dạng được sử dụng cho ngày, tháng (tên đầy đủ) và năm tương ứng.
Truy cập Python strptime () để tìm hiểu thêm.
Xử lý múi giờ bằng Python
Giả sử, bạn đang thực hiện một dự án và cần hiển thị ngày và giờ dựa trên múi giờ của chúng. Thay vì cố gắng tự xử lý múi giờ, chúng tôi khuyên bạn nên sử dụng mô-đun pytZ của bên thứ ba.
from datetime import datetime import pytz local = datetime.now() print("Local:", local.strftime("%m/%d/%Y, %H:%M:%S")) tz_NY = pytz.timezone('America/New_York') datetime_NY = datetime.now(tz_NY) print("NY:", datetime_NY.strftime("%m/%d/%Y, %H:%M:%S")) tz_London = pytz.timezone('Europe/London') datetime_London = datetime.now(tz_London) print("London:", datetime_London.strftime("%m/%d/%Y, %H:%M:%S"))
Khi bạn chạy chương trình, kết quả đầu ra sẽ như sau:
Giờ địa phương: 2018-12-20 13: 10: 44.260462 Châu Mỹ / New_ Giờ làm việc: 2018-12-20 13: 10: 44.260462 Giờ Châu Âu / Luân Đôn: 2018-12-20 13: 10: 44.260462
Ở đây, datetime_NY và datetime_London là các đối tượng datetime chứa ngày và giờ hiện tại của múi giờ tương ứng của chúng.