【问题标题】:How can i create a file name that will include also the date and time of the first day and the last day?如何创建一个包含第一天和最后一天的日期和时间的文件名?
【发布时间】:2014-10-23 05:59:06
【问题描述】:

我还不确定文件名的格式应该是怎样的想法是使文件名从第一个文件添加到列表的第一个日期和时间以及日期时间开始构建它正在创建动画 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,它就会不断将文件添加到 AnimatedGifFiles 列表中。 然后在几个小时甚至几天后,变量 ToCreate 为真,然后它将创建动画 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 或者也许:Event-12/12/04-12/22/04.gif

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

或者

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

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

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

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    编辑:我更改了格式以匹配 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 是以小时为单位的时间长度)

    【讨论】:

    • 我强烈推荐 2014-10-22 而不是 2014_10_22,因为这是符合 ISO-8601 的格式。
    【解决方案2】:

    以这种方式更改您的功能。您可以调整日期的格式。注意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>();
        }
    }
    

    【讨论】:

    • 我试过你的解决方案,我有一个问题 C:\Users\bout0_000\AppData\Local\mws\My Weather Station\AnimatedGifDirectory\Event-10/23/2014-10/23/2014 这个是 outputFile 变量中的目录。但是 MakeGIF 应该得到一个文件名,例如 C:\Users\bout0_000\AppData\Local\mws\My Weather Station\AnimatedGifDirectory\Event-10/23/2014-10/23/2014.Gif 所以我尝试在这一行做:unfreezWrapper1.MakeGIF(AnimatedGifFiles, outputFile + ".Gif", 80, true);我添加了+“.Gif”,但没有帮助。我没有收到任何错误或异常,只是没有在目录中创建动画 gif 文件。
    • 是的,我没有注意到文件路径中不应存在破折号 (/)。我将帖子编辑为通常的格式(请参阅其他帖子)并添加了 .gif 扩展名。只需替换 outputFile 变量的格式字符串,然后再试一次。
    • Fratyx 运行良好。如果我还想在文件中添加时间?我试图更改 outputFile 变量的这一部分:“Event-{0:yyyy-MM-dd HH:mm:ss}_{0:yyyy-MM-dd HH:mm:ss}.gif”所以它正在添加时间,但双方开始和结束的时间相同。我怎样才能使右边的时间是开始的时间和结束的右边的日期?例如,我现在得到的是:C:\Users\bout0_000\AppData\Local\mws\My Weather Station\AnimatedGifDirectory\Event-2014-10-23 12:14:42_2014-10-23 12:14:42.gif并且 MakeGIF 行甚至没有将此文件保存到硬盘上。如何添加时间?
    • 我的意思是 outputFile 变量的时间在左侧和右侧完全相同。时间应该不一样。而且它根本没有创建这个文件。
    • 还有一个问题是文件名中也不允许:。最好不要使用空格。两个日期相等是我的错,因为我在格式字符串中两次输入了0。 (我在帖子中修复了它。)我会建议类似的方法来解决这些问题"Event_{0:yyyy-MM-dd-HHmmss}_{1:yyyy-MM-dd-HHmmss}.gif"
    【解决方案3】:

    试试这个:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-01-31
        • 1970-01-01
        • 2014-03-02
        • 1970-01-01
        • 1970-01-01
        • 2021-03-04
        • 2011-08-15
        • 2015-02-06
        • 2021-08-26
        相关资源
        最近更新 更多