2015-05-27 15 views
19

Tôi có một chuỗi các chuỗi được định dạng ISO-8601 trong cột của trang tính của tôi. Làm thế nào tôi có thể nhận được google tờ để đối xử với họ như ngày để tôi có thể làm toán trên chúng (sự khác biệt trong vài phút giữa hai tế bào, ví dụ)? Tôi đã thử chỉ =Date("2015-05-27T01:15:00.000Z") nhưng không có niềm vui. Phải có một cách dễ dàng để làm điều này. Lời khuyên nào?Chuỗi ISO-8601 đến ngày trong ô Google Trang tính

Trả lời

12

Hãy thử điều này

=CONCATENATE(TEXT(INDEX(SPLIT(SUBSTITUTE(A1,"Z",""),"T"),1),"yyyy-mm-dd")," ",TEXT(INDEX(SPLIT(SUBSTITUTE(A1,"Z",""),"T"),2),"hh:mm:ss")) 

đâu A1 có thể là một tế bào với tiêu chuẩn ISO-8601 được định dạng chuỗi hoặc chuỗi riêng của mình.

+1

Hmmm. Điều này không chính xác nhìn "dễ dàng", nhưng tôi sẽ cho nó một whirl. Tôi đã thực sự hy vọng rằng đã có một chức năng để làm điều đó. –

+0

Giải pháp này trả về một chuỗi chứ không phải kiểu Ngày như @BobKuhar muốn. Khi tôi thử nghiệm nó với chuỗi thời gian ISO 8601, '2016-07-26T11: 12: 06.711-0400', kết quả là' 2016-07-26 11: 12: 06.711-0400'. Theo chuỗi thời gian GMT (không có chênh lệch múi giờ), '2016-07-26T11: 12: 06.711Z' trở thành' 2016-07-26 11: 12: 07'. Giải pháp này chỉ định dạng lại chuỗi ISO 8601. –

+0

Bạn phải chia kết quả, để chia nhỏ kết quả thành "2016-07-26" và "11:12:07". Hai ô này sẽ được định dạng là Ngày và Giờ. –

24

Để có được một giá trị ngày thực tế mà bạn có thể định dạng sử dụng số bình thường định dạng ...

=DATEVALUE(MID(A1,1,10)) + TIMEVALUE(MID(A1,12,8))

ví dụ.

╔═══╦══════════════════════╦════════════════════╗ 
║ ║   A   ║   B   ║ 
╠═══╬══════════════════════╬════════════════════╣ 
║ 1 ║ 2016-02-22T05:03:21Z ║ 2/22/16 5:03:21 AM ║ 
╚═══╩══════════════════════╩════════════════════╝ 
  • Giả timestamps đang UTC
  • Bỏ qua mili giây (mặc dù bạn có thể thêm một cách dễ dàng đủ)

Chức năng DATEVALUE() biến một chuỗi ngày được định dạng thành một giá trị, và TIMEVALUE() cũng làm như vậy Cho lần. Trong hầu hết các bảng tính, ngày & lần được biểu thị bằng số trong đó phần nguyên là ngày kể từ ngày 1 tháng 1 năm 1900 và phần thập phân là thời gian dưới dạng phần nhỏ trong ngày. Ví dụ: ngày 11 tháng 6 năm 2009 17:30 khoảng 39975.72917.

Công thức trên phân tích phần ngày và phần thời gian riêng biệt, sau đó thêm chúng lại với nhau.

+0

Giải pháp này là tốt. Nó tốt hơn cái được chấp nhận. Ít nhất điều này trả về một giá trị Date (Time) số, không phải là một chuỗi. Tôi đã nhận thấy rằng nếu một khoảng thời gian bù đắp được đưa ra, nó chỉ bị bỏ qua. Ngoài ra, giả định về các vị trí ký tự trong chuỗi làm cho giải pháp này ngắn và có thể nhanh hơn một số cuộc gọi hàm thay thế và chia tách. –

+1

bạn chỉ có thể thêm tz vào cuối. ... + (10/24) trong đó 10 là bù đắp – Sam

9

tôi thấy nó đơn giản hơn nhiều để sử dụng =SUM(SPLIT(A2,"TZ"))

Format yyyy-MM-dd HH:mm:ss.000 để xem giá trị ngày tháng như ISO-8601 một lần nữa.

+0

Giải pháp này không phải là xấu. Nó trả về một giá trị Date (Time) số theo yêu cầu, thay vì một chuỗi như trong câu trả lời được chấp nhận. Nó hoạt động tốt nhất với các dấu thời gian GMT, không phải với các dấu thời gian theo múi giờ. Nếu một offset được đưa ra, giải pháp này sử dụng thời gian "0". Giải pháp này là thông minh và ngắn gọn, mặc dù không chính xác như [câu trả lời khác] (/ a/36176351/543738), nhưng tốt hơn nhiều cuộc gọi hàm chuỗi. –

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