Định dạng dấu thời gian tốt nhất cho CSV / Excel?


110

Tôi đang viết tệp CSV. Tôi cần viết các dấu thời gian chính xác ít nhất đến giây và tốt nhất là đến phần nghìn giây. Định dạng tốt nhất cho dấu thời gian trong tệp CSV để chúng có thể được phân tích cú pháp chính xác và rõ ràng bằng Excel với sự can thiệp của người dùng tối thiểu?


bạn đang sử dụng ngôn ngữ nào để tạo đầu ra?
Peter Perháč

Câu trả lời:


103

Để có độ chính xác thứ hai, yyyy-MM-dd HH: mm: ss nên thực hiện thủ thuật.

Tôi tin rằng Excel không tốt lắm với các phân số của giây (mất chúng khi tương tác với đối tượng COM IIRC).


Vâng - tôi đồng ý với bạn và Fredrik. Nếu bạn có thể tìm ra những tài liệu tham khảo đó, tôi chắc chắn rất biết ơn. Cảm ơn!

18
Đối với bất cứ ai sử dụng Ruby strftime, chuỗi lập luận tương đương là"%Y-%m-%d %H:%M:%S"
Greg Matthew Crossley

2
@nickf - .CSVchỉ là một tệp văn bản. Bạn có thể hiển thị múi giờ hoặc bất kỳ thứ gì khác mà bạn ghi vào tệp dưới dạng văn bản thuần túy được phân tách bằng dấu phẩy; điều quan trọng là ứng dụng nào sẽ đọc nó và cách ứng dụng đó mong đợi văn bản. Đây là tài liệu về tiêu chuẩn CSV từ Thư viện Quốc hội Hoa Kỳ. Không có cách quy định cụ thể để lưu trữ ngày. Ngoài ra RFC-4180CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm).
ashleedawg 19/09/18

C # / IronPython File.GetLastWriteTimeUtc ("your-path-here"). ToString ("yyyy-% m-% d% H:% MM:% ss")
Konrads

Trong python với strftime (), định dạng cũng sẽ "%Y-%m-%d %H:%M:%S"giống như Ruby.
rcronk

18

Đề xuất trước đó là sử dụng "yyyy-MM-dd HH: mm: ss" là tốt, mặc dù tôi tin rằng Excel có độ phân giải thời gian tốt hơn thế. Tôi thấy bài đăng này khá đáng tin cậy (hãy làm theo chủ đề và bạn sẽ thấy rất nhiều số học và thử nghiệm với Excel), và nếu đúng, bạn sẽ có mili giây của mình. Bạn chỉ có thể giải quyết các chữ số thập phân ở cuối, tức là "yyyy-mm-dd hh: mm: ss.000".

Bạn nên biết rằng Excel có thể không nhất thiết phải định dạng dữ liệu (không có sự can thiệp của con người) theo cách mà bạn sẽ thấy tất cả độ chính xác đó. Trên máy tính của tôi tại nơi làm việc, khi tôi thiết lập CSV với dữ liệu "yyyy-mm-dd hh: mm: ss.000" (bằng tay bằng Notepad), tôi nhận được "mm: ss.0" trong ô và "m / d / yyyy hh: mm: ss AM / PM "trong thanh công thức.

Để có thông tin tối đa [1] được truyền tải trong các ô mà không có sự can thiệp của con người, bạn có thể muốn chia dấu thời gian của mình thành một phần ngày và một phần thời gian, với phần thời gian chỉ tính đến giây. Đối với tôi, có vẻ như Excel muốn cung cấp cho bạn nhiều nhất ba "cấp độ" có thể nhìn thấy (trong đó các phần nhỏ của giây là cấp độ của chính chúng) trong bất kỳ ô nhất định nào và bạn muốn bảy: năm, tháng, ngày, giờ, phút, giây, và phần nhỏ của giây.

Hoặc, nếu bạn không cần dấu thời gian để con người có thể đọc được nhưng bạn muốn nó chính xác nhất có thể, bạn có thể chỉ muốn lưu trữ một số lớn (nội bộ, Excel chỉ sử dụng số ngày, bao gồm cả ngày phân số , kể từ ngày "kỷ nguyên").


[1] Đó là, thông tin số. Nếu bạn muốn xem càng nhiều thông tin càng tốt nhưng không quan tâm đến việc tính toán với nó, bạn có thể tạo một số định dạng mà Excel chắc chắn sẽ phân tích cú pháp dưới dạng chuỗi, và do đó, hãy để nguyên; ví dụ: "yyyymmdd.hhmmss.000".


14

Định dạng "yyyy-MM-dd hh: mm: ss.000" không hoạt động ở tất cả các ngôn ngữ. Đối với một số (ít nhất là tiếng Đan Mạch) "yyyy-MM-dd hh: mm: ss, 000" sẽ hoạt động tốt hơn.


2
Kỳ lạ là Excel 2010 không phát hiện ngày khi phần mili giây là 000. Bất kỳ phần nào khác sẽ làm được.
Dio F

4

Tôi tin rằng nếu bạn sử dụng doublekiểu dữ liệu, việc tính toán lại trong Excel sẽ hoạt động tốt.


Tôi vừa thử và nó hoạt động rất tốt. Chỉ cần cho Excell biết rằng định dạng của cột cụ thể đó là Ngày / Giờ. Nó sẽ không tự động phát hiện điều này từ CSV vì nó rõ ràng không mô tả dữ liệu
Peter Perháč

3

Đi tới cài đặt ngôn ngữ trong Pa-nen Điều khiển, rồi đến Tùy chọn Định dạng, chọn một ngôn ngữ và xem định dạng ngày thực tế cho ngôn ngữ đã chọn được Windows sử dụng theo mặc định. Có, định dạng dấu thời gian đó phân biệt ngôn ngữ. Excel sử dụng các định dạng đó khi phân tích cú pháp CSV.

Hơn nữa, nếu ngôn ngữ sử dụng các ký tự vượt quá ASCII, bạn sẽ phải phát ra CSV trong bộ mã Windows "ANSI" trước Unicode tương ứng, ví dụ: CP1251. Excel sẽ không chấp nhận UTF-8.


1

Đối với múi giờ. Tôi phải lưu trữ phần bù UTC dưới dạng giây từ UTC để các công thức trong Excel / OpenOffice cuối cùng có thể bản địa hóa lịch ngày. Tôi thấy điều này dễ dàng hơn so với việc lưu trữ bất kỳ số nào có số 0 phía trước nó. -0900 không phân tích cú pháp tốt trong bất kỳ hệ thống bảng tính nào và việc nhập nó gần như không thể đào tạo mọi người làm được.


1

Định dạng "yyyy-mm-dd hh: mm: ss.000" không hoạt động ở tất cả các ngôn ngữ. Đối với một số (ít nhất là tiếng Đan Mạch) "yyyy-mm-dd hh: mm: ss, 000" sẽ hoạt động tốt hơn.

như trả lời của người dùng662894.

Tôi muốn nói thêm: Đừng cố lấy micro giây từ kiểu dữ liệu datetime2 của SQL Server: Excel không thể xử lý nhiều hơn 3 giây phân số (tức là mili giây).

Vì vậy, "yyyy-mm-dd hh: mm: ss.000000" sẽ không hoạt động và khi Excel được cung cấp loại chuỗi này (từ tệp CSV), nó sẽ thực hiện làm tròn thay vì cắt bớt .

Điều này có thể ổn trừ khi có vấn đề về độ chính xác micro giây, trong trường hợp đó bạn tốt hơn hết bằng cách KHÔNG kích hoạt nhận dạng kiểu dữ liệu tự động mà chỉ cần giữ chuỗi dưới dạng chuỗi ...


0

Tôi đoán rằng định dạng ISO là một ý tưởng hay. ( Bài viết trên Wikipedia , cũng với thông tin thời gian)


1
(phản đối; thực ra, không, excel không nhận dạng được định dạng đó)
Doug

1
@Doug Tôi vừa chạy thử nghiệm để xác minh: hoạt động tốt trong Office 2010, phiên bản tiếng Anh, đã thử với cả cài đặt cục bộ của tôi (tiếng Thụy Điển, thường sử dụng định dạng ISO cho ngày tháng và tiếng Anh Mỹ). Không quan tâm: nó đã thất bại trong môi trường nào đối với bạn? Tôi không phải là ít ngạc nhiên rằng nó hoạt động đối với một số và thất bại đối với một số: Excel là không thực sự là một kỳ quan của tính nhất quán trong kinh nghiệm của tôi ...
Fredrik Mork

1
Nó chắc chắn không hoạt động trong Office 2012 cho OSX. Định dạng 'gốc' duy nhất mà excel có thể nhận ra trong thử nghiệm của tôi là MM / DD / YYYY HH: MM: SS; mọi thứ khác chỉ đơn giản được coi là văn bản.
Doug

1
Tôi tìm thấy câu hỏi này sau khi phát hiện ra rằng Excel không nhận dạng ngày tháng ở định dạng ISO trong CSV. IMO, đó là một lỗi trong Excel.
billpg

2
Đó có thể là, @Patrick. Điều đó hơi khó để kiểm tra hồi năm 2009 ;-)
Fredrik Mörk

0

Hãy thử định dạng MM / dd / yyyy hh: mm: ss.

Mã Java để tạo tệp XML.

xmlResponse.append ("mydate>"). append (this.formatDate (resultSet.getTimestamp ("date"), "MM / dd / yyyy hh: mm: ss a")). append ("");

public String formatDate(Date date, String format)
{
    String dateString = "";
    if(null != date)
    {
        SimpleDateFormat dateFormat = new SimpleDateFormat(format);
        dateString = dateFormat.format(date);
    }
    return dateString;
}

0

Vì vậy, kỳ lạ là excel nhập ngày csv theo những cách khác nhau. , hiển thị chúng khác nhau tùy thuộc vào định dạng được sử dụng trong tệp csv. Thật không may, định dạng ISO 8061 có dạng chuỗi. Điều này ngăn bạn có thể tự định dạng lại ngày tháng.

Tất cả những cái đó đều là ngày tháng ... chứa toàn bộ thông tin ... nhưng chúng định dạng khác nhau ... nếu bạn không thích, bạn có thể chọn một định dạng mới cho cột trong excel và nó sẽ hoạt động. (Lưu ý: bạn có thể cho biết nó đến như một ngày / giờ hợp lệ vì nó sẽ căn phải ... nếu nó xuất hiện dưới dạng một chuỗi nó sẽ căn trái)

Dưới đây là các định dạng tôi đã thử nghiệm:

"yyyy-MM-dd" hiển thị như một ngày tất nhiên khi được mở trong excel. (cũng hoạt động "MM / dd / yyyy")

Định dạng hiển thị mặc định của "yyyy-MM-dd HH: mm: ss" là "MM / dd / yyyy HH: mm" (ngày và giờ có / giây)

"yyyy-MM-dd HH: mm: ss.fff" định dạng hiển thị mặc định là "HH: mm: ss" (chỉ thời gian w / giây)


-1

Cung cấp tệp csv có cột ngày giờ ở định dạng sau: yyyy-mm-dd hh: mm: ss

Excel hiển thị nó ở định dạng sau: dd / mm / yyyy hh: mm

ví dụ: 2020-05-22 16:40:55 hiển thị là 22/05/2020 16:40

Điều này được xác định rõ ràng bởi định dạng Ngày ngắn và Thời gian ngắn được chọn trong Windows; ví dụ: nếu tôi thay đổi định dạng Ngày ngắn trong Windows thành yyyy-mm-dd, Excel sẽ hiển thị 2020-05-22 16:40.

Thật khó chịu, tôi không thể tìm thấy bất kỳ cách nào để khiến Excel tự động hiển thị giây (tôi phải định dạng cột theo cách thủ công trong Excel). Nhưng nếu tệp csv bao gồm cột thời gian ở định dạng hh: mm: ss (ví dụ: 16:40:55), thì đó là những gì hiển thị trong Excel, bao gồm cả giây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.