Ngày giờ trong Python (Có ví dụ)

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 datetimecâu lệnh.

Một trong các lớp được định nghĩa trong datetimemô-đun là datetimelớ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 datelớ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 datecác đối tượng từ datelớ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 datelớ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 datelớp từ datetimemô-đ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 datecá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:

  1. một chuỗi đại diện cho ngày và giờ
  2. mã định dạng tương đương với đối số đầu tiên

Nhân tiện %d, %B%Ymã đị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.

thú vị bài viết...