【问题标题】:What is the type of subtitle (.srt) time frame?字幕 (.srt) 时间范围的类型是什么?
【发布时间】:2012-05-18 03:55:42
【问题描述】:

我正在开发 C# 应用程序,它将读取 .srt 文件并将其显示在屏幕上。

文件格式就是这样的;

1   00:00:06,000    00:00:07,400    Enjoy the movie! 
2   00:00:07,500    00:00:09,500    Hi, my name is Mary
3   00:00:22,000    00:00:25,000    Hello my name is John.

我正在使用一个计时器,它每 100 毫秒滴答一次,并且在每一个滴答声中,我 想检查值是否在开始和结束之间。在这种情况下,首先将介于 00:00:06,000 和 00:00:07,400。但我不确定我应该使用什么值。我试图将其解析为 DateTime 但它没有转换。

有什么想法吗?

【问题讨论】:

    标签: c# parsing time timer


    【解决方案1】:

    你必须使用TimeSpan类型来解析看看here

    【讨论】:

    • 我尝试了TimeSpan firstTime = TimeSpan.Parse("00:00:06,000");,但没有成功。有什么想法吗?
    • 这是因为您在毫秒之前使用逗号,因为文档说它应该是一个像 firstTime = TimeSpan.Parse("00:00:06.000");
    • 没问题:)你可以看看解析documentation备注部分说如何格式化。
    【解决方案2】:

    您可以使用DateTimeTimeSpan,但您需要将correct format 提供给ParseExact 函数。

    【讨论】:

      【解决方案3】:

      使用时间跨度。 这里是简单的控制台项目,可以在正确的时间显示字幕

          class Program
          {
          private static Queue<Subtitle> _subtitles;
      
          private static Subtitle _activeSubtitle;
      
          private static TimeSpan _currentTime = new TimeSpan();
      
          static void Main(string[] args)
          {
              _subtitles = new Queue<Subtitle>();
      
              Subtitle title1 = new Subtitle()
                                    {
                                        StartTime = TimeSpan.Parse("00:00:06,000"),
                                        EndTime =  TimeSpan.Parse("00:00:07,400"),
                                        Text = "Enjoy the movie!"
                                    };
      
              Subtitle title2 = new Subtitle()
                                    {
                                        StartTime = TimeSpan.Parse("00:00:07,500"),
                                        EndTime =  TimeSpan.Parse("00:00:09,500"),
                                        Text = "Hi, my name is Mary"
                                    };
      
              Subtitle title3 = new Subtitle()
                                    {
                                        StartTime = TimeSpan.Parse("00:00:22,000"),
                                        EndTime =  TimeSpan.Parse("00:00:25,000"),
                                        Text = "Hello my name is John."
                                    };
      
              _subtitles.Enqueue(title1);
              _subtitles.Enqueue(title2);
              _subtitles.Enqueue(title3);
      
              Timer timer = new Timer(ShowSubtitles, null, 0, 100);
      
              while (_currentTime <= new TimeSpan(0, 0, 0, 30))
              {
      
              }
              Console.WriteLine("End");
          }
      
          private static void ShowSubtitles(object state)
          {
      
              if (_activeSubtitle == null && _subtitles.Count > 0)
                  _activeSubtitle = _subtitles.Dequeue();
              Console.WriteLine(_currentTime);
      
              if (_activeSubtitle != null)
              {
      
      
                  if (_currentTime >= _activeSubtitle.StartTime && _currentTime <= _activeSubtitle.EndTime)
                      Console.WriteLine("\t{0}", _activeSubtitle.Text);
      
                  if (_currentTime >= _activeSubtitle.EndTime)
                      _activeSubtitle = null;
              }
              _currentTime = _currentTime.Add(new TimeSpan(0, 0, 0, 0, 100));
      
          }
      }
      
      internal class Subtitle
      {
          public TimeSpan StartTime { get; set; }
          public TimeSpan EndTime { get; set; }
          public string Text { get; set; }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-23
        • 1970-01-01
        • 2010-09-22
        • 1970-01-01
        相关资源
        最近更新 更多