Định dạng ngày và giờ yêu thích của bạn trong tên tệp là gì? [đóng cửa]


88

Đây là một câu hỏi hơi chủ quan, và không quan trọng lắm trong kế hoạch lớn của mọi thứ, nhưng có điều gì đó làm tôi khó chịu thường xuyên. Dường như không có cách nào rõ ràng để đặt dấu thời gian vào tên tệp .

Vấn đề khách quan là dấu thời gian trong tên tệp phải có thể sắp xếp được . Nhưng các định dạng ngày có thể sắp xếp .NET như "s" ( "yyyy-MM-ddTHH:mm:ss") và "u" ( "yyyy-MM-dd HH:mm:ssZ") không hợp lệ trong tên tệp vì các ký tự ':'.

Một điều khác là bạn sẽ dễ dàng xem giờ quốc tế hay giờ địa phương được sử dụng. Trên thực tế, người dùng có vẻ thích giờ địa phương hơn giờ quốc tế.

Tôi hầu như đã kết thúc bằng cách sử dụng ISO 8601 với định dạng thời gian cơ bản:

  • Chuỗi định dạng giờ địa phương "yyyy-MM-ddTHHmmsszz"
  • Chuỗi định dạng UTC "yyyy-MM-ddTHHmmssZ"

Ở các định dạng này, giờ địa phương hiện tại của tôi sẽ là "2009-08-08T151800+03"và UTC"2009-08-08T121800Z"

Bạn cũng có thể tự động phát hiện DateTime.Kind bằng "K" và sử dụng "yyyy-MM-ddTHHmmssK", nhưng sau đó bạn sẽ phải thay thế các ký tự ':'.

Bất cứ một đề nghị nào khác?

Chỉnh sửa: Một vài ghi chú cho đến nay:

Giờ địa phương + định dạng múi giờ "yyyy-MM-ddTHHmmsszz"không còn có thể sắp xếp được nếu có liên quan đến nhiều múi giờ. Trong hầu hết các trường hợp, bạn nên bỏ thông tin múi giờ nếu nó thừa và sử dụng UTC nếu không.

Một điều nữa là UTC phải luôn được đánh dấu bằng 'Z', 'GMT' hoặc 'UTC' để tránh phỏng đoán và nhầm lẫn.

Ngày Julian và khác stardate là mát mẻ bởi vì ngày số học với lịch Gregorian là braindead.


2
Tôi đồng ý với tất cả điều này ngoại trừ việc tôi làm thấy nó quan trọng trong các chương trình lớn của sự vật. Định dạng của bạn là tốt nhất Tôi thậm chí sẽ sử dụng múi giờ 4 chữ số như được chỉ định trong ISO8601, để phù hợp với các vùng không phải số nguyên. Tôi luôn làm phiền tôi rằng ISO8601 không giải quyết dấu hai chấm bị cấm trong tên tệp.
hpekristiansen

Tôi đề nghị một định dạng dựa trên tiêu chuẩn ISO 8601 trong một bài đăng ở blog.xam.de/2016/07/... - sẽ làm cho thế giới của chúng tôi dễ dàng hơn, nếu chúng ta có thể đồng ý về một định dạng :-)
Tiến sĩ Max Völkel

"đóng như không có tính xây dựng" ?? Có những lý do cho và chống lại mọi đề xuất, vì vậy nó mang tính xây dựng. Không cần phải né tránh một câu hỏi về các chi tiết triết học tốt hơn của cách đặt tên tệp: D
tanius

Câu trả lời:


57

Tôi sử dụng cái này:

My-File--2009-12-31--23-59-59.txt
  • Không có khoảng trắng
  • Dấu gạch ngang kép để tách các mảnh, giúp dễ nhìn thấy từng mảnh
  • Chỉ một ký tự dấu câu (dấu gạch ngang) giúp bạn dễ dàng nhập văn bản
  • Không có múi giờ vì đối với tôi, tôi luôn làm việc trong múi giờ địa phương của mình; nếu tôi cần, tôi sẽ sử dụng UTC và thêm " --UTC" sau thời gian.

5
Tôi làm gần như tương tự mặc dù tôi bắt đầu với dấu thời gian và sau đó là nội dung 'tệp của tôi' vì điều đó cho phép người ta xem các tệp theo thứ tự thời gian bằng cách sắp xếp các tên tệp theo thứ tự bảng chữ cái.
ChristopheD

2
@ChristopheD: Chắc chắn rồi - tôi cũng sẽ làm như vậy trong trường hợp đó. Đối với câu trả lời của tôi, tôi đã nghĩ đến trường hợp bạn có nhiều phiên bản của một số tệp khác nhau và bạn muốn chúng được nhóm theo tên tệp.
RichieHindle

2
Cá nhân tôi thích sử dụng dấu gạch dưới ( _) thay vì dấu gạch ngang kép để tách các phần. (ví dụ 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.extlà ok cho Linux shell. Không có múi giờ, nhưng với độ chính xác nano giây.
Ivan Black

14

Tôi muốn sử dụng YYYY-MM-DD HHmmsscho tên tệp, trừ khi có nhu cầu cụ thể về múi giờ hoặc có thể cần phân tích cú pháp chúng thành ngày ISO; trong những trường hợp đó, ngày ISO có lẽ sẽ thích hợp hơn.

Chỉnh sửa: Múi giờ không thực sự cần thiết; lưu mọi thứ theo UTC và cho mọi người biết rằng tất cả mọi thứ đều là UTC hiệu quả hơn việc chỉ định múi giờ của mọi thứ.


9
ouch, dấu cách trong tên tệp của bạn?
Saggi Malachi

10
Có gì sai với dấu cách?
Joey

41
Vâng, không gian là xấu. Cá nhân tôi sẽ theo dõi những người sử dụng khoảng trống trong tên tập tin và đánh bại họ đến chết với một cây gậy ướt của cần tây :-)
paxdiablo

1
@Saggi; Tôi có lẽ xứng đáng với cái đó, nhưng nghiêm túc - hãy chỉ cho tôi một hệ thống không xử lý tên tệp có dấu cách? Từ những gì tôi có thể thu thập, không có URI nào liên quan và do đó tôi không lo lắng quá nhiều về khoảng trống. Tất nhiên, bạn có thể trao đổi không gian đó cho một thứ khác, chẳng hạn như dấu gạch dưới hoặc T, nhưng điều đó kém tự nhiên hơn khi bạn đọc nó.
Bạn

1
Tôi sẽ bỏ phiếu cho cái này (nhưng tôi không bao giờ sử dụng dấu cách), lý do là năm 4 chữ số sẽ giải quyết vấn đề y2k1 (nhưng không phải là y10k, nhưng ai thực sự đưa ra XXXX về điều đó?).
paxdiablo

8

Đây là những gì tôi sử dụng:

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

Nó cần một ngày và mô tả. Hãy sử dụng "I like DOGS". Kết quả trong:

ILikeDogs_1999-09-23_18-42


1
Một cách tuyệt vời để ngắt ngày giờ và ít hơn câu trả lời của @ RichieHindle 1 ký tự.
Robino

3

Có yêu cầu nào để con người có thể đọc được dấu thời gian không? Nếu không, bạn chỉ có thể sử dụng DateTime.Ticks.ToString () . Rất chính xác, có thể sắp xếp và không có ký tự đặc biệt.


1
Tôi có xu hướng cố gắng làm cho mọi thứ mà con người có thể đọc được, nếu có thể. Đây là một trong những giá trị tuyệt vời của các lược đồ như ký hiệu JSON. Ngay cả khi bạn không nghĩ rằng nó cần phải để con người có thể đọc được, bạn sẽ không bao giờ biết liệu bạn có muốn nó sau này con người có thể đọc được hay không. Ngoài ra, nó có xu hướng giúp gỡ lỗi dễ dàng hơn.
Edan Maor

Liên kết bị ngắt, nó sẽ đi đến đâu?
rbatt

@rbatt Tôi nghĩ rằng đó chỉ là sự cố MSDN tạm thời - nên quay lại ngay bây giờ.
Dan Diplo

2

Thông thường tôi sử dụng yyyymmdd. Nếu cần độ chính xác cao hơn, nó sẽ thay đổi thành yyyymmddhhmmss


1

Tôi sử dụng dấu thời gian unix, ví dụ. bao nhiêu giây đã trôi qua từ kỷ nguyên. Mọi lúc theo giờ UTC. Nhưng hãy đoán bạn có thể đặt trước dữ liệu w / múi giờ nếu muốn.

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.