Apa format tanggal dan waktu favorit Anda pada nama file? [Tutup]

90

Ini adalah pertanyaan yang agak subjektif, dan tidak terlalu penting dalam skema besar, tetapi sesuatu yang mengganggu saya secara teratur. Tampaknya tidak ada cara yang jelas untuk menjelaskan a stempel waktu di nama file .

Masalah obyektif adalah bahwa stempel waktu dalam nama file harus dapat diurutkan . Tetapi format tanggal .NET yang dapat diurutkan seperti "s" ( "yyyy-MM-ddTHH:mm:ss") dan "u" ( "yyyy-MM-dd HH:mm:ssZ") tidak valid dalam nama file karena karakter ':'.

Hal lainnya adalah Anda harus dengan mudah melihat apakah waktu universal atau lokal digunakan. Secara praktis, pengguna tampaknya lebih menyukai waktu lokal daripada waktu universal.

Saya sebagian besar akhirnya menggunakan ISO 8601 dengan format waktu dasar:

  • String format waktu lokal "yyyy-MM-ddTHHmmsszz"
  • String format UTC "yyyy-MM-ddTHHmmssZ"

Dalam format ini, waktu lokal saya saat ini adalah "2009-08-08T151800+03" dan UTC"2009-08-08T121800Z"

Anda juga dapat mendeteksi DateTime.Kind secara otomatis dengan "K" dan menggunakan "yyyy-MM-ddTHHmmssK", tetapi Anda harus mengganti karakter ':'.

Ada saran lain?

Edit: Beberapa catatan sejauh ini:

format zona waktu + waktu lokal "yyyy-MM-ddTHHmmsszz"tidak lagi dapat diurutkan jika melibatkan beberapa zona waktu. Dalam kebanyakan kasus, akan masuk akal untuk membuang info zona waktu jika itu berlebihan, dan menggunakan UTC jika tidak.

Hal lain adalah bahwa UTC harus selalu ditandai dengan 'Z', 'GMT' atau 'UTC' untuk mencegah dugaan dan kesalahan.

Tanggal Julian dan lainnya Tanggal bintang yang keren karena tanggal aritmatika dengan kalender Gregorian adalah braindead.

mika
sumber
2
Saya setuju dengan semua ini kecuali bahwa saya tidak merasa penting dalam skema besar hal. Format Anda adalah yang terbaik -Saya bahkan akan menggunakan zona waktu 4 digit seperti yang ditentukan dalam ISO8601, untuk mengakomodasi zona non-integer. Itu selalu mengganggu saya bahwa ISO8601 tidak mengatasi titik dua terlarang dalam nama file.
hpekristiansen
Saya mengusulkan format berdasarkan ISO 8601 dalam sebuah posting di blog.xam.de/2016/07/… - akan membuat dunia kita lebih mudah, jika kita dapat menyetujui format :-)
Dr. Max Völkel
"ditutup sebagai tidak konstruktif" ?? Ada alasan yang mendukung dan menentang setiap proposal, sehingga bersifat konstruktif. Tidak perlu menghindar dari pertanyaan tentang detail filosofis yang lebih baik dari penamaan file: D
tanius

Jawaban:

58

Saya menggunakan ini:

My-File--2009-12-31--23-59-59.txt
  • Tidak ada ruang
  • Tanda hubung ganda untuk memisahkan bagian, sehingga setiap bagian mudah dilihat
  • Hanya satu karakter tanda baca (tanda hubung) sehingga mudah untuk mengetik
  • Tidak ada zona waktu karena bagi saya, saya selalu bekerja dalam zona waktu lokal saya; jika saya membutuhkannya, saya akan memilih UTC dan menambahkan " --UTC" setelah waktunya.
RichieHindle
sumber
5
Saya melakukan kira-kira sama meskipun saya mulai dengan stempel waktu dan kemudian hal-hal 'file-saya' karena itu memungkinkan seseorang untuk melihat file dalam urutan kronologis hanya dengan memesan nama file menurut abjad.
ChristopheD
2
@ ChristopheD: Tentu - Saya akan melakukan hal yang sama dalam kasus itu. Untuk jawaban saya, saya memikirkan kasus di mana Anda memiliki beberapa versi dari beberapa file yang berbeda, dan Anda ingin mereka dikelompokkan berdasarkan nama file.
RichieHindle
2
Secara pribadi saya lebih suka menggunakan garis bawah ( _) daripada tanda hubung ganda untuk memisahkan potongan. (mis. My-File_2009-12-31_23-59-59.txt)
Elie G.
A name_-_2019-11-04--15-04-36.642621403_-_2019-11-04--15-04-36.642622803.extok untuk shell Linux. Tidak ada zona waktu, tapi dengan presisi nanodetik.
Ivan Black
15

Saya akan menggunakan YYYY-MM-DD HHmmssuntuk nama file, kecuali jika ada kebutuhan khusus untuk zona waktu atau kemungkinan kebutuhan untuk menguraikannya menjadi tanggal ISO; dalam kasus tersebut tanggal ISO mungkin lebih disukai.

Sunting: Zona waktu seharusnya tidak pernah diperlukan; menyimpan semuanya di UTC dan memberi tahu orang-orang bahwa semua itu UTC lebih efisien daripada menentukan zona waktu semuanya.

Kamu
sumber
9
Aduh, spasi di nama file Anda?
Saggi Malachi
10
Apa yang salah dengan spasi?
Joey
41
Ya, spasi itu mengerikan. Saya pribadi akan melacak orang-orang yang menggunakan spasi dalam nama file dan memukuli mereka sampai mati dengan sebatang seledri basah :-)
paxdiablo
1
@Aggi; Yah saya mungkin pantas mendapatkannya, tapi serius - tunjukkan satu sistem yang tidak menangani nama file dengan spasi? Dari apa yang bisa saya kumpulkan, tidak ada URI yang terlibat sehingga saya tidak terlalu khawatir tentang spasi. Anda tentu saja dapat menukar ruang itu dengan sesuatu yang lain, seperti garis bawah atau T, tetapi itu kurang alami saat Anda membacanya.
Anda
1
Saya akan memilih yang ini (tapi saya tidak pernah menggunakan spasi), alasannya adalah tahun 4 digit yang akan menangguhkan masalah y2k1 (tapi bukan yang y10k, tapi siapa yang benar-benar memberi XXXX tentang itu?).
paxdiablo
9

Inilah yang saya gunakan:

    private static string CreateMeaningfulFileName(string friendlyName, DateTime date)
    {
        StringBuilder sb = new StringBuilder();
        foreach (string s in friendlyName.Split(new char[] { ' ' }))//remove spaces
        {
            sb.Append(CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s.ToLower()));//capitalize each segment
        }
        sb.Append("_" + date.ToString("yyyy-MM-dd_HH-mm"));//add date
        return sb.ToString();
    }

Dibutuhkan tanggal dan deskripsi. Mari gunakan "Saya suka ANJING". Hasil dalam:

ILikeDogs_1999-09-23_18-42

N-makan
sumber
1
Cara yang bagus untuk mematahkan tanggal dan waktu dan 1 karakter kurang dari jawaban @ RichieHindle.
Robino
3

Apakah ada persyaratan agar stempel waktu dapat dibaca manusia? Jika tidak, Anda bisa menggunakan DateTime.Ticks.ToString () . Sangat akurat, dapat diurutkan, dan tidak ada karakter khusus.

Dan Diplo
sumber
1
Saya cenderung mencoba dan membuat segala sesuatu dapat dibaca manusia, jika memungkinkan. Ini adalah salah satu nilai besar skema seperti notasi JSON. Bahkan jika Anda tidak berpikir itu perlu dibaca manusia, Anda tidak pernah tahu apakah Anda ingin itu bisa dibaca manusia nanti. Selain itu, ini cenderung mempermudah proses debug.
Edan Maor
Linknya down, apa tujuannya?
rbatt
@rbatt Saya pikir itu hanya masalah MSDN sementara - harus kembali sekarang.
Dan Diplo
2

Biasanya saya menggunakan yyyymmdd. Jika presisi lebih lanjut diperlukan, itu berubah menjadi yyyymmddhhmmss

Carlton Jenke
sumber
1

Saya menggunakan stempel waktu unix, misalnya. berapa detik berlalu dari zaman. Semua waktu dalam UTC. Tapi tebak Anda bisa mengawali dengan data zona waktu jika Anda mau.

jinzo
sumber