2011-10-30 38 views

Trả lời

4

Câu trả lời của tôi trong bài đăng được liên kết chủ yếu liên quan đến protobuf-net; Tuy nhiên, kể từ khi bạn đang đến lúc này từ java tôi sẽ khuyên bạn nên: giữ nó đơn giản.

Đối với ngày tháng, tôi khuyên bạn chỉ nên sử dụng thời gian (có thể là mili giây) vào kỷ nguyên (ngày 1 tháng 1 năm 1970 là truyền thống). Đối với thời gian, chỉ cần kích thước trong cùng một đơn vị (mili giây, vv). Đối với thập phân, có thể sử dụng điểm cố định đơn giản bằng cách mở rộng quy mô - vì vậy có thể coi 1.05 là 1050 dài và khẳng định luôn chính xác 3dp (do đó là điểm cố định).

Điều này rất đơn giản và thực dụng và bao gồm hầu hết các trường hợp phổ biến mà không làm mọi thứ phức tạp.

+0

Thx ... Tôi đã làm theo lời khuyên ur và làm cho các trường ngày được biểu diễn dưới dạng "int64" thành tệp proto và tôi sẽ chuyển đổi nó thành Ngày thành lớp java của tôi. – Echo

+0

Đó là những gì tôi thường làm, chỉ cần lưu trữ millis kể từ unoch epoch. – Jeremy

+0

Bạn có đề xuất int64 hoặc fixed64 không? – ticktock

2

Tôi không được bán theo ý tưởng này, nhưng tôi là thực sự không được bán theo ý tưởng lưu trữ ngày (không phải là thời điểm) làm dấu thời gian, vì vậy đây là đề xuất của tôi.

Chuyển đổi ngày của bạn thành số nguyên có thể đọc được bằng con người (ví dụ: 2014-11-3 trở thành 20141103) và lưu trữ giá trị số nguyên này. Nó chứa chính xác dữ liệu bạn cần, rất đơn giản để tạo và phân tích cú pháp và chiếm không gian tối thiểu. Ngoài ra, nó được đặt hàng và có một ánh xạ một ngày đến các giá trị hợp lệ (được cấp, số không hợp lệ là có thể, chẳng hạn như 20149999, nhưng chúng dễ phát hiện). Ngược lại, có khoảng 86400 dấu thời gian hợp lệ đại diện cho mỗi ngày.

NB: Có discussion on DBA SE chỉ trích phương pháp lưu trữ ngày này, nhưng trong ngữ cảnh đó, loại ngày chuyên biệt tồn tại, rõ ràng không phải là trường hợp ở đây.

Các vấn đề liên quan