TimeStampをファイル名に追加


118

この問題に何度か遭遇しましたが、同じディレクトリに同じファイルの複数のバージョンを置きたいと思っています。C#を使用してこれを行っている方法は、次のようなものでファイル名にタイムスタンプを追加することDateTime.Now.ToString().Replace('/', '-').Replace(':', '.')です。これを行うより良い方法はありますか?

回答:


260

DateTime.ToStringメソッドを使用できます(String)

DateTime.Now.ToString("yyyyMMddHHmmssfff")

またはstring.Format

string.Format("{0:yyyy-MM-dd_HH-mm-ss-fff}", DateTime.Now);

または補間文字列

$"{DateTime.Now:yyyy-MM-dd_HH-mm-ss-fff}"

次のカスタム形式指定子y(年)、M(月)、d(日)、h(時間12)、H(時間24)、m(分)、s(秒)、f(秒の小数)、Fがあります。 (2番目の端数、末尾のゼロは削除されます)、t(PMまたはAM)およびz(タイムゾーン)。

延長方法あり

使用法:

string result = "myfile.txt".AppendTimeStamp();
//myfile20130604234625642.txt

延長方法

public static class MyExtensions
{
    public static string AppendTimeStamp(this string fileName)
    {
        return string.Concat(
            Path.GetFileNameWithoutExtension(fileName),
            DateTime.Now.ToString("yyyyMMddHHmmssfff"),
            Path.GetExtension(fileName)
            );
    }
}

1
Path.GetDirectoryName(fileName)ファイルの完全パスを取得するために追加しました。その後、交換しstring.Concat()Path.Combine()完全なファイル名を取得します。
gilu 2017年

17

私は使いたい:

string result = "myFile_" + DateTime.Now.ToFileTime() + ".txt";

ToFileTime()は何をしますか?

現在のDateTimeオブジェクトの値をWindowsファイル時間に変換します。

public long ToFileTime()

Windowsファイル時間は64ビットの値であり、1601年1月1日の午前0時から経過した100ナノ秒間隔の数を表します。1601AD(CE)協定世界時(UTC)。Windowsは、ファイル時間を使用して、アプリケーションがファイルを作成、アクセス、またはファイルに書き込むタイミングを記録します。

ソース:MSDNドキュメント-DateTime.ToFileTimeメソッド


10

おそらくDateTime.Now.Ticks代わりに追加すると、3つの文字列を作成せず、目盛りの値も常に一意になるため、少し速くなります。


2

あなたは使うことができます:

Stopwatch.GetTimestamp();

この答えは、タイムスタンプを取得する方法です。Pathクラスを使用してファイルに追加すると、文字列操作はまったく問題になりません。これは、DateTime.ToStringメソッド(String)またはstring.Format( "{0:yyyy-MM-dd_hh-mm-ss-tt}"、DateTime.Now);の代替手段です。
ジョセフ


1

ファイルシステム上のファイルの名前として、現在の日付と時刻。次に、string.Formatメソッドを呼び出し、DateTime.Nowと組み合わせて、日付と時刻に基づいて正しい文字列を出力するメソッドを作成します。

using System;
using System.IO;

class Program
{
    static void Main()
    {
        //
        // Write file containing the date with BIN extension
        //
        string n = string.Format("text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin",
            DateTime.Now);
        File.WriteAllText(n, "abc");
    }
}

出力:

C:\Users\Fez\Documents\text-2020-01-08_05-23-13-PM.bin

"text-{0:yyyy-MM-dd_hh-mm-ss-tt}.bin"

text-必要な出力の最初の部分ファイルはすべてtext-で始まります

{0:これが文字列のプレースホルダーであることを示しますゼロは、ここに挿入されたパラメーターのインデックスを示します

yyyy-年を4桁で出力し、その後にダッシュを続けます。これには「年10000」の問題があります。

MM-月を2桁で印刷します

dd_は、アンダースコアが後に続く2桁で日を出力します

hh-時間を2桁で出力します

mm-同じく2桁​​で分を出力します

ss-予想通り、秒を出力します

tt時刻に応じてAMまたはPMを出力します

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.