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

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 time.time add seconds - python time. thời gian thêm giây

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 time.time add seconds - python time. thời gian thêm giây

Paul Stephensonpaul StephensonPaul Stephenson

65.5K9 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 time.time add seconds - python time. thời gian thêm giây

Paxdiablopaxdiablopaxdiablo

827K227 Huy hiệu vàng1549 Huy hiệu bạc1917 Huy hiệu đồng227 gold badges1549 silver badges1917 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 time.time add seconds - python time. thời gian thêm giây

Đã 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

179K66 Huy hiệu vàng208 Huy hiệu bạc256 Huy hiệu Đồng66 gold badges208 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 time.time add seconds - python time. thời gian thêm giây

Paul Stephensonpaul StephensonPaul Stephenson

65.5K9 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

827K227 Huy hiệu vàng1549 Huy hiệu bạc1917 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

179K66 Huy hiệu vàng208 Huy hiệu bạc256 Huy hiệu ĐồngOct 9, 2017 at 19:41

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

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 badges11 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ã.

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

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

Bạn không thể chỉ cần thêm số vào

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 vì không rõ đơn vị nào được sử dụng: giây, giờ, tuần ...Nick Johnson

Có lớp

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 cho các thao tác với ngày và giờ.
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 trừ
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 cho
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,
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 cộng 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 cho
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, hai đối tượ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())
1 không thể được thêm vào mặc dù hai
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 có thể.16 gold badges128 silver badges197 bronze badges

Tạo đối tượ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())
2 với số giây bạn muốn thêm và thêm nó vào đối tượ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())
1:

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

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)
6

Đã 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 time.time add seconds - python time. thời gian thêm giây

Blthayerblthayerblthayer

6541 Huy hiệu vàng6 Huy hiệu bạc14 Huy hiệu đồng1 gold badge6 silver badges14 bronze badges

Nếu bạn chưa có đối tượng TimeDelta, một khả năng khác là chỉ cần khởi tạo một đối tượng thời gian mới thay vì các thuộc tính của người cũ và thêm các giá trị khi cần thiết:

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

Phải thừa nhận rằng điều này chỉ hoạt động nếu bạn đưa ra một vài giả định về các giá trị của bạn, vì tràn không được xử lý ở đây.Nhưng tôi chỉ nghĩ rằng nó đáng để ghi nhớ điều này vì nó có thể tiết kiệm một hoặc hai dòng

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