Saya sedang menulis file CSV. Saya perlu menulis stempel waktu yang akurat setidaknya untuk detik, dan lebih disukai untuk milidetik. Apa format terbaik untuk cap waktu dalam file CSV sehingga dapat diurai secara akurat dan tidak ambigu oleh Excel dengan intervensi pengguna yang minimal?
110
Jawaban:
Untuk akurasi kedua, yyyy-MM-dd HH: mm: ss harus melakukan triknya.
Saya percaya Excel tidak terlalu baik dengan sepersekian detik (kehilangan mereka saat berinteraksi dengan objek COM IIRC).
sumber
strftime
, string argumen yang setara adalah"%Y-%m-%d %H:%M:%S"
.CSV
hanyalah file teks. Anda dapat menampilkan zona waktu atau apa pun yang Anda tulis ke file sebagai teks biasa yang dipisahkan koma; apa yang penting adalah apa aplikasi akan membaca itu, dan bagaimana yang aplikasi mengharapkan teks. Berikut dokumentasi untuk standar CSV dari Library of Congress. Tidak ada cara khusus untuk menyimpan kurma. Juga RFC-4180 dan CSV-1203 //creativyst.com/Doc/Articles/CSV/CSV01.htm)."%Y-%m-%d %H:%M:%S"
- sama seperti Ruby.Saran sebelumnya untuk menggunakan "yyyy-MM-dd HH: mm: ss" baik-baik saja, meskipun saya yakin Excel memiliki resolusi waktu yang jauh lebih baik daripada itu. Saya menemukan posting ini agak kredibel (ikuti utas dan Anda akan melihat banyak aritmatika dan bereksperimen dengan Excel), dan jika benar, Anda akan memiliki milidetik Anda. Anda bisa memasukkan tempat desimal di akhir, yaitu "tttt-bb-hh jj: mm: ss.000".
Anda harus menyadari bahwa Excel mungkin tidak memformat data (tanpa campur tangan manusia) sedemikian rupa sehingga Anda akan melihat semua presisi itu. Di komputer saya di kantor, saat saya menyiapkan CSV dengan data "yyyy-mm-hh jj: mm: ss.000" (dengan tangan menggunakan Notepad), saya mendapatkan "mm: ss.0" di sel dan "m / d / tttt jj: mm: dd AM / PM "di bilah rumus.
Untuk informasi maksimum [1] yang disampaikan dalam sel tanpa campur tangan manusia, Anda mungkin ingin membagi stempel waktu Anda menjadi bagian tanggal dan bagian waktu, dengan bagian waktu hanya ke detik. Bagi saya sepertinya Excel ingin memberikan paling banyak tiga "level" yang terlihat (di mana sepersekian detik adalah levelnya sendiri) dalam sel tertentu, dan Anda menginginkan tujuh: tahun, bulan, hari, jam, menit, detik, dan sepersekian detik.
Atau, jika Anda tidak memerlukan stempel waktu agar dapat dibaca manusia tetapi Anda ingin agar seakurat mungkin, Anda mungkin lebih memilih untuk menyimpan jumlah yang besar (secara internal, Excel hanya menggunakan jumlah hari, termasuk hari pecahan , sejak tanggal "zaman").
[1] Yaitu, informasi numerik. Jika Anda ingin melihat informasi sebanyak mungkin tetapi tidak peduli tentang melakukan penghitungan dengannya, Anda dapat membuat beberapa format yang pasti akan diurai oleh Excel sebagai string, dan dengan demikian biarkan saja; misalnya "yyyymmdd.hhmmss.000".
sumber
Format "yyyy-MM-hh jj: mm: ss.000" tidak berfungsi di semua bahasa. Untuk beberapa (setidaknya bahasa Denmark), "yyyy-MM-dd hh: mm: ss, 000" akan bekerja lebih baik.
sumber
Saya yakin jika Anda menggunakan
double
tipe data, penghitungan ulang di Excel akan bekerja dengan baik.sumber
Buka pengaturan bahasa di Panel Kontrol, lalu Opsi Format, pilih lokal dan lihat format tanggal aktual untuk lokal yang dipilih yang digunakan oleh Windows secara default. Ya, format stempel waktu itu peka terhadap bahasa lokal. Excel menggunakan format tersebut saat mengurai CSV.
Lebih jauh lagi, jika lokal menggunakan karakter di luar ASCII, Anda harus memancarkan CSV di halaman kode "ANSI" Windows pra-Unicode yang sesuai, misalnya CP1251. Excel tidak akan menerima UTF-8.
sumber
Adapun zona waktu. Saya harus menyimpan UTC offset sebagai detik dari UTC sehingga rumus di Excel / OpenOffice pada akhirnya dapat melokalkan waktu data. Saya menemukan ini lebih mudah daripada menyimpan nomor apa pun yang memiliki 0 di depannya. -0900 tidak mengurai dengan baik di sistem spreadsheet mana pun dan mengimpor hampir tidak mungkin melatih orang untuk melakukannya.
sumber
seperti yang dibalas oleh user662894.
Saya ingin menambahkan: Jangan mencoba untuk mendapatkan mikrodetik dari, katakanlah, tipe data datetime2 SQL Server: Excel tidak dapat menangani lebih dari 3 pecahan detik (mis. Milidetik).
Jadi "yyyy-mm-hh jj: mm: ss.000000" tidak akan berfungsi, dan saat Excel diberi makan jenis string ini (dari file CSV), Excel akan melakukan pembulatan daripada pemotongan .
Ini mungkin baik-baik saja kecuali ketika presisi mikrodetik penting, dalam hal ini Anda lebih baik dengan TIDAK memicu pengenalan tipe data otomatis tetapi simpan saja string sebagai string ...
sumber
Saya rasa format ISO adalah ide yang bagus. ( Artikel Wikipedia , juga dengan info waktu)
sumber
Coba BB / hh / tttt jj: mm: dd dalam format.
Kode Java untuk membuat file XML.
sumber
Jadi, anehnya excel mengimpor tanggal csv dengan cara yang berbeda. Dan , menampilkannya secara berbeda tergantung pada format yang digunakan di file csv. Sayangnya format ISO 8061 hadir sebagai string. Yang mencegah Anda dari kemungkinan memformat ulang tanggal itu sendiri.
Semua yang datang sebagai tanggal ... berisi seluruh informasi ... tetapi formatnya berbeda ... jika Anda tidak menyukainya, Anda dapat memilih format baru untuk kolom di excel dan itu akan berfungsi. (Catatan: Anda dapat mengatakan itu datang sebagai tanggal / waktu yang valid karena itu akan membenarkan ... jika itu datang sebagai string itu akan meninggalkan rata)
Berikut adalah format yang saya uji:
"yyyy-MM-dd" muncul sebagai tanggal kursus saat dibuka di excel. (juga "MM / dd / yyyy")
"tttt-BB-hh JJ: mm: dd" format tampilan default adalah "BB / hh / tttt JJ: mm" (tanggal dan waktu tanpa detik)
"yyyy-MM-hh HH: mm: ss.fff" format tampilan default adalah "HH: mm: ss" (hanya waktu w / detik)
sumber
Diberikan file csv dengan kolom datetime dalam format ini: yyyy-mm-hh jj: mm: ss
Excel menunjukkannya dalam format ini: hh / bb / tttt jj: mm
misalnya 2020-05-22 16:40:55 ditampilkan sebagai 22/05/2020 16:40
Ini jelas ditentukan oleh format tanggal pendek dan waktu singkat yang dipilih di Windows; misalnya, jika saya mengubah format tanggal pendek di Windows menjadi tttt-bb-hh, Excel akan menampilkan 2020-05-22 16:40.
Sayangnya, saya tidak dapat menemukan cara untuk membuat Excel menampilkan detik secara otomatis (saya harus memformat kolom secara manual di Excel). Tetapi jika file csv menyertakan kolom waktu dalam format jj: mm: dd (misalnya 16:40:55), itulah yang ditampilkan di Excel, termasuk detik.
sumber