2009-04-29 41 views
80

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

+0

gì ngôn ngữ mà bạn đang sử dụng để tạo đầu ra ? –

Trả lời

70

Đối với độ 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 phải là rất tốt với phân số của một giây (mất chúng khi tương tác với đối tượng COM IIRC - Tôi sẽ cố gắng tìm một tài liệu tham khảo và đăng nó ở đây).

+0

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

+11

Bất kỳ ý tưởng nào về cách bạn hiển thị múi giờ? – nickf

+8

Đối với bất kỳ ai sử dụng ['strftime'] của Ruby (http://apidock.com/ruby/DateTime/strftime), chuỗi đối số tương đương là' "% Y-% m-% d% H:% M:% S" ' –

2

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

+0

Tôi vừa thử và nó hoạt động thực sự độc đáo. Chỉ cần nói với Excell 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 –

0

Tôi đoán rằng ISO-format là một ý tưởng hay. (Wikipedia article, cũng có thông tin về thời gian)

+0

Đồng ý; điều này dường như là đặt cược tốt nhất. –

+1

(downvote; trên thực tế, không, excel không nhận ra đị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, ấn bản tiếng Anh, đã thử với cả hai cài đặt cục bộ của tôi (tiếng Thụy Điển, định dạng ISO cho ngày và tiếng Anh Mỹ). Không quan tâm: trong đó môi trường đã làm nó thất bại trong cho bạn? Tôi không ngạc nhiên khi nó hoạt động cho một số người và thất bại đối với một số người: Excel không thực sự là một thắc mắc về tính nhất quán trong kinh nghiệm của tôi ... –

11

Đề xuất trước đây để 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 nhiều so với điều đó. Tôi tìm thấy this post khá đáng tin cậy (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 nó chính xác, bạn sẽ có mili giây của bạn. Bạn chỉ có thể tack vào vị trí thập phân ở cuối, ví dụ: "yyyy-mm-dd hh: mm: ss.000".

Bạn nên lưu ý 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 một tệp CSV có 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.

Để biết thông tin tối đa [1] được chuyển tải trong các ô không có sự can thiệp của con người, bạn có thể muốn chia dấu thời gian thành phần ngày và phần thời gian, chỉ với phần thời gian. Có vẻ như tôi muốn cung cấp cho bạn tối đa ba mức "hiển thị" (trong đó phân số của một giây là cấp độ riêng của họ) trong bất kỳ ô nào và bạn muốn bảy: năm, tháng, ngày, giờ, phút, giây, và phân số của một giây. Hoặc, nếu bạn không cần dấu thời gian để có thể đọc được con người 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 (trong nội bộ, Excel chỉ sử dụng số ngày). , kể cả các ngày phân đoạn, kể từ ngày "kỷ nguyên").


[1] Tức 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 thực hiện các phép tính với nó, bạn có thể tạo ra một số định dạng mà Excel chắc chắn sẽ phân tích thành chuỗi, và do đó để lại một mình; ví dụ. "yyyymmdd.hhmmss.000".

9

đị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à Đan Mạch) "yyyy-MM-dd hh: mm: ss, 000" sẽ hoạt động tốt hơn.

+0

Kỳ lạ Excel 2010 không phát hiện ngày khi phần nghìn giây là 000. Bất kỳ phần nào khác cũng sẽ làm. –

1

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

1

Chuyển đến cài đặt ngôn ngữ trong Pa-nen điều khiển, sau đó chọn Tùy chọn định dạng, chọn ngôn ngữ và xem định dạng ngày tháng 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 đó là nhạy cảm theo 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ự ngoài ASCII, bạn sẽ phải phát ra CSV trong bảng mã "ANSI" Windows tiền tương ứng, ví dụ: CP1251. Excel sẽ không chấp nhận UTF-8.

0

Thử MM/dd/yyyy hh: mm: ss một định dạng.

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

xmlResponse.append ("mydate>") append (this.formatDate (resultSet.getTimestamp ("ngày"), "MM/dd/yyyy hh: mm: ss")). nối thêm ("");

"hh yyyy-mm-dd: mm: ss.000"
public String formatDate(Date date, String format) 
{ 
    String dateString = ""; 
    if(null != date) 
    { 
     SimpleDateFormat dateFormat = new SimpleDateFormat(format); 
     dateString = dateFormat.format(date); 
    } 
    return dateString; 
} 
1

định dạng không hoạt động trong tất cả các miền địa phươ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 bởi user662894.

Tôi muốn thêm: Đừng cố gắng 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 phân số giây (tức là mili giây).

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

Đây có thể là tốt, trừ khi vấn đề micro chính xác, trong trường hợp bạn đang tốt hơn bởi không kích hoạt một sự công nhận datatype tự động nhưng chỉ giữ chuỗi như chuỗi ...

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