Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Với giá trị

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
8 trong Python, có cách nào tiêu chuẩn để thêm số nguyên giây vào nó, để
def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
9 + 3 =
import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
0 chẳng hạn?

Những ý tưởng rõ ràng này không hoạt động:

>>> datetime.time(11, 34, 59) + 3
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'int'
>>> datetime.time(11, 34, 59) + datetime.timedelta(0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.timedelta'
>>> datetime.time(11, 34, 59) + datetime.time(0, 0, 3)
TypeError: unsupported operand type(s) for +: 'datetime.time' and 'datetime.time'

Cuối cùng, tôi có các chức năng bằng văn bản như thế này:

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)

Tôi không thể không nghĩ rằng tôi đang thiếu một cách dễ dàng hơn để làm điều này.

Có liên quan

  • Python Time + Timedelta tương đương

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

hỏi ngày 19 tháng 9 năm 2008 lúc 7:19Sep 19, 2008 at 7:19

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Paul Stephensonpaul StephensonPaul Stephenson

66K9 Huy hiệu vàng49 Huy hiệu bạc51 Huy hiệu Đồng9 gold badges49 silver badges51 bronze badges

1

Bạn có thể sử dụng các biến

import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
1 đầy đủ với
import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
2 và bằng cách cung cấp một ngày giả sau đó sử dụng
import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
3 để chỉ nhận được giá trị thời gian.

Ví dụ:

import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())

Kết quả trong hai giá trị, cách nhau ba giây:

11:34:59
11:35:02

Bạn cũng có thể chọn cách dễ đọc hơn

b = a + datetime.timedelta(seconds=3)

Nếu bạn rất nghiêng.


Nếu bạn theo sau một chức năng có thể làm điều này, bạn có thể xem xét bằng cách sử dụng

import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
4 bên dưới:

import datetime

def addSecs(tm, secs):
    fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
    fulldate = fulldate + datetime.timedelta(seconds=secs)
    return fulldate.time()

a = datetime.datetime.now().time()
b = addSecs(a, 300)
print(a)
print(b)

Điều này ra:

 09:11:55.775695
 09:16:55

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 7:54Sep 19, 2008 at 7:54

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Paxdiablopaxdiablopaxdiablo

831K229 Huy hiệu vàng1552 Huy hiệu bạc1923 Huy hiệu Đồng229 gold badges1552 silver badges1923 bronze badges

2

Như những người khác đã nêu, bạn chỉ có thể sử dụng các đối tượng DateTime đầy đủ trong suốt:

from datetime import datetime, date, time, timedelta
sometime = time(8,00) # 8am
later = (datetime.combine(date.today(), sometime) + timedelta(seconds=3)).time()

Tuy nhiên, tôi nghĩ rằng nó đáng để giải thích tại sao các đối tượng DateTime đầy đủ được yêu cầu. Hãy xem xét những gì sẽ xảy ra nếu tôi thêm 2 giờ vào 11 giờ tối. Hành vi chính xác là gì? Một ngoại lệ, vì bạn không thể có thời gian lớn hơn 11:59 tối? Nó có nên quấn lại xung quanh không?

Các lập trình viên khác nhau sẽ mong đợi những điều khác nhau, vì vậy bất kỳ kết quả nào họ chọn sẽ gây ngạc nhiên cho rất nhiều người. Tệ hơn nữa, các lập trình viên sẽ viết mã hoạt động tốt khi họ kiểm tra nó ban đầu, và sau đó bị phá vỡ sau đó bằng cách làm điều gì đó bất ngờ. Điều này rất tệ, đó là lý do tại sao bạn không được phép thêm các đối tượng Timedelta vào các đối tượng thời gian.

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 13:47Sep 19, 2008 at 13:47

Eli Courtwrighteli CourtwrightEli Courtwright

Phim thương hiệu vàng 180K6666 gold badges209 silver badges256 bronze badges

2

Một điều nhỏ, có thể thêm độ rõ để ghi đè giá trị mặc định cho giây

>>> b = a + datetime.timedelta(seconds=3000)
>>> b
datetime.datetime(1, 1, 1, 12, 24, 59)

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 8:08Sep 19, 2008 at 8:08

0

Cảm ơn @Pax Diablo, @bvmou và @AchNID vì đề xuất sử dụng các dữ liệu đầy đủ trong suốt. Nếu tôi phải chấp nhận các đối tượng DateTime.

def add_secs_to_time(timeval, secs_to_add):
    dummy_date = datetime.date(1, 1, 1)
    full_datetime = datetime.datetime.combine(dummy_date, timeval)
    added_datetime = full_datetime + datetime.timedelta(seconds=secs_to_add)
    return added_datetime.time()

Mã dài dòng này có thể được nén vào một lớp này:

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
0

Nhưng tôi nghĩ rằng tôi muốn kết thúc nó trong một chức năng cho sự rõ ràng của mã.

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 9:40Sep 19, 2008 at 9:40

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Paul Stephensonpaul StephensonPaul Stephenson

66K9 Huy hiệu vàng49 Huy hiệu bạc51 Huy hiệu Đồng9 gold badges49 silver badges51 bronze badges

0

Bạn có thể sử dụng các biến

import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
1 đầy đủ với
import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
2 và bằng cách cung cấp một ngày giả sau đó sử dụng
import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
3 để chỉ nhận được giá trị thời gian.

Ví dụ:

Kết quả trong hai giá trị, cách nhau ba giây:

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
1

Bạn cũng có thể chọn cách dễ đọc hơn

Nếu bạn rất nghiêng.Jan 18, 2018 at 7:30

user2387567user2387567user2387567

Nếu bạn theo sau một chức năng có thể làm điều này, bạn có thể xem xét bằng cách sử dụng

import datetime
a = datetime.datetime(100,1,1,11,34,59)
b = a + datetime.timedelta(0,3) # days, seconds, then other fields.
print(a.time())
print(b.time())
4 bên dưới:2 silver badges4 bronze badges

1

Điều này ra:

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 7:54

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
2

Paxdiablopaxdiablo

831K229 Huy hiệu vàng1552 Huy hiệu bạc1923 Huy hiệu Đồng

Như những người khác đã nêu, bạn chỉ có thể sử dụng các đối tượng DateTime đầy đủ trong suốt:Jul 27, 2011 at 3:49

Tuy nhiên, tôi nghĩ rằng nó đáng để giải thích tại sao các đối tượng DateTime đầy đủ được yêu cầu. Hãy xem xét những gì sẽ xảy ra nếu tôi thêm 2 giờ vào 11 giờ tối. Hành vi chính xác là gì? Một ngoại lệ, vì bạn không thể có thời gian lớn hơn 11:59 tối? Nó có nên quấn lại xung quanh không?rescdsk

Các lập trình viên khác nhau sẽ mong đợi những điều khác nhau, vì vậy bất kỳ kết quả nào họ chọn sẽ gây ngạc nhiên cho rất nhiều người. Tệ hơn nữa, các lập trình viên sẽ viết mã hoạt động tốt khi họ kiểm tra nó ban đầu, và sau đó bị phá vỡ sau đó bằng cách làm điều gì đó bất ngờ. Điều này rất tệ, đó là lý do tại sao bạn không được phép thêm các đối tượng Timedelta vào các đối tượng thời gian.4 gold badges34 silver badges32 bronze badges

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 13:47

Eli Courtwrighteli Courtwright

Phim thương hiệu vàng 180K66Oct 9, 2017 at 19:41

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Một điều nhỏ, có thể thêm độ rõ để ghi đè giá trị mặc định cho giây

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 8:08

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
4

Cảm ơn @Pax Diablo, @bvmou và @AchNID vì đề xuất sử dụng các dữ liệu đầy đủ trong suốt. Nếu tôi phải chấp nhận các đối tượng DateTime.Jan 27, 2021 at 13:44

Mã dài dòng này có thể được nén vào một lớp này:VengaVenga

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
01 gold badge7 silver badges12 bronze badges

Nhưng tôi nghĩ rằng tôi muốn kết thúc nó trong một chức năng cho sự rõ ràng của mã.

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
5

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 9:40

Đã trả lời ngày 30 tháng 3 lúc 8:52Mar 30 at 8:52

2

Hãy thử thêm

b = a + datetime.timedelta(seconds=3)
7 vào
b = a + datetime.timedelta(seconds=3)
8.Nếu bạn chỉ muốn phần thời gian, bạn có thể gọi phương thức
b = a + datetime.timedelta(seconds=3)
9 trên đối tượng
b = a + datetime.timedelta(seconds=3)
7 kết quả để có được nó.

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Đã trả lời ngày 19 tháng 9 năm 2008 lúc 7:29Sep 19, 2008 at 7:29

Nick Johnsonnick JohnsonNick Johnson

100K16 Huy hiệu vàng128 Huy hiệu bạc197 Huy hiệu đồng16 gold badges128 silver badges197 bronze badges

Câu hỏi cũ, nhưng tôi hình dung tôi sẽ ném vào một chức năng xử lý thời gian.Các phần chính đang chuyển thuộc tính

import datetime

def addSecs(tm, secs):
    fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
    fulldate = fulldate + datetime.timedelta(seconds=secs)
    return fulldate.time()

a = datetime.datetime.now().time()
b = addSecs(a, 300)
print(a)
print(b)
2 của đối tượng
def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
8 vào kết hợp, sau đó sử dụng
import datetime

def addSecs(tm, secs):
    fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
    fulldate = fulldate + datetime.timedelta(seconds=secs)
    return fulldate.time()

a = datetime.datetime.now().time()
b = addSecs(a, 300)
print(a)
print(b)
3 thay vì
b = a + datetime.timedelta(seconds=3)
9 trên Datetime giả.Câu trả lời này một phần lấy cảm hứng từ các câu trả lời khác ở đây.

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
6

Và đây là một lớp trường hợp thử nghiệm thực sự đơn giản (sử dụng

import datetime

def addSecs(tm, secs):
    fulldate = datetime.datetime(100, 1, 1, tm.hour, tm.minute, tm.second)
    fulldate = fulldate + datetime.timedelta(seconds=secs)
    return fulldate.time()

a = datetime.datetime.now().time()
b = addSecs(a, 300)
print(a)
print(b)
5 tích hợp):

def add_secs_to_time(timeval, secs_to_add):
    secs = timeval.hour * 3600 + timeval.minute * 60 + timeval.second
    secs += secs_to_add
    return datetime.time(secs // 3600, (secs % 3600) // 60, secs % 60)
7

Đã trả lời ngày 14 tháng 8 năm 2019 lúc 15:58Aug 14, 2019 at 15:58

Hướng dẫn python add seconds to time - python thêm giây vào thời gian

Blthayerblthayerblthayer

7041 Huy hiệu vàng6 Huy hiệu bạc16 Huy hiệu đồng1 gold badge6 silver badges16 bronze badges