Package google.protobuf

Chỉ mục

Thời lượng

Thời lượng biểu thị một khoảng thời gian có dấu, có độ dài cố định, biểu diễn dưới dạng số giây và phân số của giây ở độ phân giải nano giây. Ngày này độc lập với mọi lịch và khái niệm như "ngày" hoặc "tháng". Vấn đề này liên quan đến Timestamp (Dấu thời gian), ở chỗ sự khác biệt giữa hai giá trị Timestamp là Thời lượng và có thể được cộng hoặc trừ từ Timestamp (Dấu thời gian). Phạm vi xấp xỉ +-10.000 năm.

Ví dụ 1: Tính thời lượng từ hai dấu thời gian trong mã giả.

Timestamp start = ...;
Timestamp end = ...;
Duration duration = ...;

duration.seconds = end.seconds - start.seconds;
duration.nanos = end.nanos - start.nanos;

if (duration.seconds < 0 && duration.nanos > 0) {
  duration.seconds += 1;
  duration.nanos -= 1000000000;
} else if (duration.seconds > 0 && duration.nanos < 0) {
  duration.seconds -= 1;
  duration.nanos += 1000000000;
}

Ví dụ 2: Dấu thời gian tính toán từ dấu thời gian + Thời lượng trong mã giả.

Timestamp start = ...;
Duration duration = ...;
Timestamp end = ...;

end.seconds = start.seconds + duration.seconds;
end.nanos = start.nanos + duration.nanos;

if (end.nanos < 0) {
  end.seconds -= 1;
  end.nanos += 1000000000;
} else if (end.nanos >= 1000000000) {
  end.seconds += 1;
  end.nanos -= 1000000000;
}
Tên trường Loại Nội dung mô tả
seconds int64 giây đã ký trong khoảng thời gian. Giá trị này phải nằm trong khoảng từ -315.576.000.000 đến +315.576.000.000.
nanos int32 Các phân số đã ký của giây ở độ phân giải nano giây trong khoảng thời gian. Thời lượng dưới một giây được biểu thị bằng trường seconds 0 và trường nanos dương hoặc âm. Trong các khoảng thời gian từ 1 giây trở lên, giá trị khác 0 của trường nanos phải cùng dấu với trường seconds. Giá trị phải từ -999.999.999 đến +999.999.999.