2013-01-31 18 views
20

Sự khác biệt giữa strptimestrftime là gì? Tôi thấy rằng strptime là một phương pháp trong lớp DateTimestrftime là một phương pháp trong lớp học Time.Cách hiểu strptime và strftime

  1. Sự khác nhau giữa TimeDateTime, khác với phương pháp cốt lõi khác là gì? Lời giải thích cho lớp Time trong tài liệu Ruby là hữu ích, nhưng một cho DateTime chỉ nói "datetime". Còn có lớp Date, cho biết nó cung cấp DateDateTime. Giúp tôi hiểu được điều này.
  2. Tôi thấy strptime và tôi muốn phát âm nó "dải thời gian", nhưng điều đó không có ý nghĩa. Có một thiết bị ghi nhớ tốt cho nó?
  3. Điều gì làm strptimestrftime có nghĩa là, dù sao?
  4. Làm thế nào để bạn nhớ cái nào?
+0

Cho "04/26/2017", để lưu trữ trong cơ sở dữ liệu, bạn sẽ phân tích cú pháp và sau đó định dạng: Date.strptime ("04/26/2017", '% m /% d /% Y'). strftime ('% Y-% m-% d') – Donato

Trả lời

45

Sự khác biệt giữa TimeDateTime phải làm với việc triển khai. DateTime đến từ thế giới Rails và là một ngày tùy ý với thời gian trong ngày. Đó là một hệ thống dựa trên lịch. Time được tính bằng giây kể từ ngày 1 tháng 1 năm 1970 UTC và là thời điểm bất khả tri. Trên một số hệ thống, nó được giới hạn trong các giá trị từ năm 1901 đến năm 2038, giới hạn về giá trị này được lưu trữ như một số nguyên 32 bit, nhưng các phiên bản mới hơn của Ruby có thể xử lý phạm vi rộng hơn nhiều, sử dụng giá trị 64 bit hoặc BigNum theo yêu cầu.

Tóm lại, DateTime là những gì bạn nhận được từ cơ sở dữ liệu trong Rails nơi Thời gian là những gì Ruby đã sử dụng theo truyền thống. Nếu bạn đang làm việc với các giá trị mà ngày tháng quan trọng và bạn muốn biết những thứ như cuối tháng hoặc ngày nào sẽ là sáu tuần trước, hãy sử dụng DateTime. Nếu bạn chỉ đo thời gian trôi qua và không quan tâm đến điều đó, hãy sử dụng Thời gian. Họ dễ dàng chuyển đổi giữa nếu cần.

Date mặt khác chỉ là ngày theo lịch và không có bất kỳ thời gian liên quan nào. Bạn có thể muốn sử dụng những thời điểm này không liên quan.

strptime viết tắt của "thời gian phân tích cú pháp" trong đó strftime là dành cho "thời gian định dạng". Tức là, strptime là đối diện của strftime mặc dù chúng sử dụng, thuận tiện, cùng một đặc điểm định dạng. Tôi hiếm khi thấy strptime được sử dụng kể từ DateTime.parse thường tốt khi chọn những gì đang diễn ra, nhưng nếu bạn thực sự cần đánh vần nó, bằng mọi cách, hãy sử dụng trình phân tích cú pháp cũ.

+3

Bạn là một người đàn ông tốt, @tadman, và [kỹ lưỡng] (http://www.youtube.com/watch?v=NMwB5uIWOOI) – nickcoxdotme

+1

Thời gian và tất cả sắc thái xấu xí của nó là một trong những điều bạn học quá nhiều về khi viết phần mềm. "Có bao nhiêu giây trong một ngày?" giống như "Âm thanh của một tay vỗ tay là gì?" – tadman

+1

Giá trị thời gian ban đầu được dựa trên đồng hồ phần cứng trong hệ thống Unix, đó là lý do tại sao ban đầu chúng được giới hạn ở một giá trị bắt đầu từ "kỷ nguyên", tức là khi * nix xuất hiện. [Bài viết của Wikipedia] (https://en.wikipedia.org/wiki/Unix_time) rất hữu ích. –

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