Bir dosya adında en sevdiğiniz tarih ve saat biçimi nedir? [kapalı]


90

Bu biraz öznel bir sorudur ve işlerin büyük şemasında çok önemli değildir, ancak yine de beni düzenli olarak rahatsız eden bir şeydir. Bir dosya adına zaman damgası koymanın apaçık bir yolu yok gibi görünüyor .

Amaç, dosya adlarındaki zaman damgalarının sıralanabilir olmasıdır . Ancak "s" ( "yyyy-MM-ddTHH:mm:ss") ve "u" ( "yyyy-MM-dd HH:mm:ssZ") gibi .NET sıralanabilir tarih biçimleri , ':' karakterleri nedeniyle dosya adlarında geçerli değildir.

Diğer bir şey de, evrensel saatin mi yoksa yerel saatin mi kullanıldığını kolayca görmeniz gerektiğidir . Pratikte kullanıcılar yerel saati evrensel saate tercih ediyor gibi görünüyor.

Çoğunlukla temel zaman biçimiyle ISO 8601'i kullandım :

  • Yerel saat biçimi dizesi "yyyy-MM-ddTHHmmsszz"
  • UTC biçim dizesi "yyyy-MM-ddTHHmmssZ"

Bu biçimlerde şu anki yerel "2009-08-08T151800+03"saatim ve UTC"2009-08-08T121800Z"

Ayrıca DateTime.Kind öğesini "K" ile otomatik olarak algılayabilir ve kullanabilirsiniz "yyyy-MM-ddTHHmmssK", ancak daha sonra ':' karakterlerini değiştirmeniz gerekir.

Başka öneriniz var mı?

Düzenleme: Şimdiye kadar birkaç not:

"yyyy-MM-ddTHHmmsszz"Birden fazla saat dilimi söz konusuysa yerel saat + saat dilimi biçimi artık sıralanamaz. Çoğu durumda, saat dilimi bilgisini gereksizse bırakmak ve aksi takdirde UTC kullanmak mantıklı olacaktır.

Diğer bir husus da, tahminlerin ve hataların önlenmesi için UTC'nin her zaman 'Z', 'GMT' veya 'UTC' ile işaretlenmesi gerektiğidir.

Jülyen tarihleri ve diğer yıldız isimleri harikadır çünkü gregorian takvimi ile tarih aritmetiği beyinsizdir.


2
Ben o hariç tüm bu katılıyorum yapmak şeylerin büyük düzeninde önemli buluyorum. Formatınız en iyisidir - Tamsayı olmayan bölgeleri barındırmak için ISO8601'de belirtildiği gibi 4 basamaklı saat dilimini bile kullanırdım. ISO8601'in dosya adlarında yasaklanmış iki nokta üst üste işaret etmemesi beni her zaman rahatsız etmiştir.
hpekristiansen

Blog.xam.de/2016/07/… adresindeki bir gönderide ISO 8601'e dayalı bir format öneriyorum - eğer bir format üzerinde anlaşabilirsek dünyamızı kolaylaştırır :-)
Dr. Max Völkel

"yapıcı olmadığı için kapandı" ?? Orada ve her teklife karşı nedenleri vardır, bu yüzden olduğu yapıcı. Dosya isimlendirmenin daha ince felsefi detayları hakkında bir sorudan
çekinmenize gerek yok

Yanıtlar:


58

Bunu kullanıyorum:

My-File--2009-12-31--23-59-59.txt
  • Boşluksuz
  • Parçaları ayırmak için çift çizgi, her parçanın görülmesini kolaylaştırır
  • Yazmayı kolaylaştıran yalnızca bir noktalama karakteri (tire)
  • Saat dilimi yok çünkü benim için her zaman yerel saat dilimde çalışıyorum; Eğer ihtiyacım olsaydı, UTC ile gider --UTCve saatin arkasına " " eklerdim .

5
Yaklaşık olarak aynı şeyi yapıyorum, ancak zaman damgası ve ardından 'dosyam' şeyleriyle başlamama rağmen , dosya adlarını alfabetik olarak sıralayarak dosyaları kronolojik sırada görüntülemeye izin veriyor.
ChristopheD

2
@ChristopheD: Elbette - bu durumda ben de aynısını yapardım. Cevabım için, birkaç farklı dosyanın birkaç sürümüne sahip olduğunuz ve bunların dosya adına göre gruplandırılmasını istediğiniz durumu düşünüyordum.
RichieHindle

2
Şahsen ben _parçaları ayırmak için çift çizgi yerine alt çizgi ( ) kullanmayı tercih ediyorum . (örn. 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.ext, Linux kabuğu için uygundur. Saat dilimi yok, ancak nanosaniye hassasiyetinde.
Ivan Black

15

YYYY-MM-DD HHmmssSaat dilimlerine özel bir ihtiyaç olmadıkça veya bunları ISO tarihlerine ayrıştırmak için olası bir ihtiyaç olmadığı sürece dosya adları için kullanırım ; bu gibi durumlarda bir ISO tarihi muhtemelen tercih edilir.

Düzenleme: Saat dilimleri gerçekten gerekli olmamalı; her şeyi UTC'de kaydetmek ve insanların tüm bunların UTC olduğunu bilmesini sağlamak, her şeyin saat dilimini belirlemekten daha etkilidir.


9
ouch, dosya adlarınızda boşluklar?
Saggi Malachi

10
Boşlukların nesi var?
Joey

41
Evet, boşluklar iğrenç. Dosya adlarında boşluk kullanan ve onları ıslak bir kereviz sopasıyla
öldürene

1
@Saggi; Pekala, muhtemelen bunu hak etmiştim, ama cidden - boşluklarla dosya adlarını işlemeyen bir sistem gösterin? Toplayabildiğim kadarıyla, hiçbir URI yoktu ve bu nedenle boşluklar hakkında çok fazla endişelenmiyorum. Bu alanı elbette alt çizgi veya gibi başka bir şeyle takas edebilirsiniz T, ancak okuduğunuzda bu daha az doğaldır.
Sen

1
Buna oy vereceğim (ama asla boşluk kullanmam), y2k1 problemini erteleyecek olan 4 basamaklı yıl olmasının nedeni (ama y10k değil, ama bununla ilgili gerçekten bir XXXX kim veriyor?).
paxdiablo

9

İşte kullandığım şey:

    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();
    }

Bir tarih ve açıklama alır. "KÖPEKLERİ severim" kullanalım. Sonuçlar:

ILikeDogs_1999-09-23_18-42


1
Tarih ve saati kırmanın güzel bir yolu ve @ RichieHindle'ın cevabından 1 karakter daha az.
Robino

3

Zaman damgasının insanlar tarafından okunabilir olması için bir gereklilik var mı? Değilse, sadece DateTime.Ticks.ToString () kullanabilirsiniz . Çok doğru, sıralanabilir ve özel karakterler yok.


1
Mümkünse her şeyi insan tarafından okunabilir hale getirmeye çalışıyorum. Bu, JSON gösterimi gibi şemaların en büyük değerlerinden biridir. İnsan tarafından okunabilir olması gerektiğini düşünmeseniz bile, daha sonra insan tarafından okunabilir olmasını isteyip istemediğinizi asla bilemezsiniz. Ayrıca, daha kolay hata ayıklama yapma eğilimindedir.
Edan Maor

Bağlantı koptu, neye gitti?
rbatt

@rbatt Bunun geçici bir MSDN sorunu olduğunu düşünüyorum - şimdi geri dönmeliyim.
Dan Diplo

2

Normalde yyyyaagg kullanırım. Daha fazla hassasiyet gerekirse, yyyymmddhhmmss olarak değişir


1

Unix zaman damgaları kullanıyorum, ör. çağdan kaç saniye geçti. Tüm zamanlar UTC olarak. Ancak dilerseniz saat dilimi verilerinin önekini de alabileceğinizi tahmin edin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.