如何创建一个文件名,其中还包括第一天和最后一天的日期和时间?

时间:2014-10-23 05:59:06

标签: c# .net winforms

我还不确定文件名的格式应该是如何建立从第一个文件添加到列表和日期的第一个日期和时间开始构建的文件名它创建动画gif文件的时间:

private void CreateAnimatedGif(bool ToCreate)
{
    if (ToCreate == false)
    {
        AnimatedGifFiles.Add(last_file);
    }
    else
    {
        for (int i = 0; i < AnimatedGifFiles.Count; i++)
        {
            if (!AnimatedGifFiles[i].Contains(last_file))
                AnimatedGifFiles.Add(last_file);
        }
        if (AnimatedGifFiles.Count > 1)
        {
            unfreezWrapper1.MakeGIF(AnimatedGifFiles, AnimatedGifDirectory, 80, true);
        }
        AnimatedGifFiles = new List<string>();
    }
}

只有当网站每次都提供新图像并将图像下载到我的硬盘时,才会每隔X秒调用此方法。

然后,该方法可以被召唤数小时,有时甚至是3-4天。

只要变量ToCreate为false,它就会继续向List AnimatedGifFiles添加文件。 然后在几个小时后甚至可能有些天变量ToCreate为真,然后它将创建Animated gif文件。

目前在这一行我只给了它一个目录:

unfreezWrapper1.MakeGIF(AnimatedGifFiles, AnimatedGifDirectory, 80, true);

AnimatedGifDirectory是一个包含目录的路径。但它最终应该带有文件名,例如:c:\ test \ AnimatedGifFile \ Animated.gif

但现在它只有c:\ test \ AnimatedGifFile \

我不确定如何使用第一个添加的文件创建文件名到列表日期和时间以及创建动画gif文件的日期和时间。

类似的东西:12/12 / 04_12 / 22 / 04.gif 我希望用户根据文件名知道事件发生的日期12/12/04以及截止时间12/22/04

然后再过几个小时或几天后,将调用该方法,以便下一个文件名为例如:01/10 / 05_01 / 13 / 05.gif

依此类推,但我不确定如何使用第一个添加的文件日期时间创建文件名,最后是日期时间以及要制作的文件格式?

可能是这样的:First-12/12 / 04_Last-12/22 / 04.gif 或者:事件-12 / 12 / 04-12 / 22 / 04.gif

我想在开始和结束时添加每一侧的时间,但这可能会使文件太长。

或者

也许最简单的方法是为每个事件创建一个目录,例如:

事件-12/12 / 04-12 / 22/04

在里面创建一个更短的gif文件。

4 个答案:

答案 0 :(得分:2)

编辑:我将格式更改为匹配ISO 8601

首先,我建议你使用一个易于排序的日期格式:例如,2014_10_22。 文件名格式可以是: 2014_10_22__2014_10_23_1900.gif 2014-10-22__2014-10-23T1900.gif

或更好的排序(如果可能在同一日期创建几个文件): 2014_10_22__1600__56h.gif 2014-10-22T1600__56h.gif
(其中1600是下午4点 - 文件的开始时间,56是以小时为单位的时间长度)

答案 1 :(得分:1)

以这种方式改变你的功能。您可以调整日期格式的方式。请注意dateTime成员变量。

private List<string> AnimatedGifFiles;
private  DateTime startTime;  // new!!

private void CreateAnimatedGif(bool ToCreate)
{
    if(AnimatedGifFiles.Count == 0)   // new!!
      startTime = DateTime.Now;

    if (ToCreate == false)
    {
        AnimatedGifFiles.Add(last_file);
    }
    else
    {
        for (int i = 0; i < AnimatedGifFiles.Count; i++)
        {
            if (!AnimatedGifFiles[i].Contains(last_file))
                AnimatedGifFiles.Add(last_file);
        }
        if (AnimatedGifFiles.Count > 1)
        {
            string outputFile = System.IO.Path.Combine(   // new!!
                AnimatedGifDirectory, 
                string.Format(
                    System.Globalization.CultureInfo.InvariantCulture, 
                    "Event-{0:yyyy-MM-dd}-{1:yyyy-MM-dd}.gif", startTime, DateTime.Now)); 

            unfreezWrapper1.MakeGIF(AnimatedGifFiles, outputFile, 80, true); //new!!
        }
        AnimatedGifFiles = new List<string>();
    }
}

答案 2 :(得分:1)

试试这个:

private string startDateTime = "";

private void CreateAnimatedGif(bool ToCreate)
{
    string endDateTime; 

    if (ToCreate == false)
    {
        if(startDateTime == ""){startDateTime = DateTime.Now.ToString("yyyy-MM-ddTHH'h'mm'm'ss's'_");}
        AnimatedGifFiles.Add(last_file);
    }
    else
    {
        if (!AnimatedGifFiles.Contains(last_file))
        {
            AnimatedGifFiles.Add(last_file);
        }
        if (AnimatedGifFiles.Count > 1)
        {
            endDateTime = DateTime.Now.ToString("yyyy-MM-ddTHH'h'mm'm'ss's.gif'");
            unfreezWrapper1.MakeGIF(AnimatedGifFiles,  AnimatedGifDirectory+ startDateTime + endDateTime, 80, true);
        }
        startDateTime = "";
        //You don't create a new list. Clear the existing one
        if(AnimatedGifFiles.Count != 0){AnimatedGifFiles.Clear();}
    }
}

答案 3 :(得分:0)

我没有清楚地理解你的代码,但我认为你试图做那样的事情:

    private void CreateAnimatedGif(bool ToCreate) {
        string dateOfCreate;

        if (ToCreate == false)
        {
            if(AnimatedGifFiles.Count == 0) // that means it's the first element in the list
            {
                dateOfCreate = DateTime.Now.ToString();
            }
            AnimatedGifFiles.Add(last_file);
        }
        else
        {
            if(AnimatedGifFiles.Count == 0) // that means it's the first element in the list
            {
                dateOfCreate = DateTime.Now.ToString();
            }
            if (!AnimatedGifFiles.Contains(last_file))
            {
                AnimatedGifFiles.Add(last_file);
            }
            if (AnimatedGifFiles.Count > 1)
            {
                unfreezWrapper1.MakeGIF(AnimatedGifFiles, AnimatedGifDirectory + dateOfCreate + DateTime.Now.ToString(), 80, true);
            }
            AnimatedGifFiles = new List<string>();
        }
}