C# 字幕(.srt)的时间范围是什么?

C# 字幕(.srt)的时间范围是什么?,c#,parsing,time,timer,C#,Parsing,Time,Timer,我正在开发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毫秒滴答响一次,每滴答响一次,我都会这样做 要检查值

我正在开发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:06000和00:00:07400。但我不确定我应该使用什么值。我试图将其解析为DateTime,但它没有转换


有什么想法吗

您必须使用类型TimeSpan进行分析查看

您必须使用类型TimeSpan进行分析查看

您可以使用或,但需要提供给
ParseExact
函数。

您可以使用或,但需要提供给
ParseExact
函数。

使用TimeSpan。 这里是一个简单的控制台项目,用于在正确的时间显示字幕

    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; }
}
类程序
{
专用静态队列字幕;
私有静态字幕_activeSubtitle;
私有静态时间跨度_currentTime=new TimeSpan();
静态void Main(字符串[]参数)
{
_subtitles=新队列();
副标题title1=新副标题()
{
StartTime=TimeSpan.Parse(“00:00:06000”),
EndTime=TimeSpan.Parse(“00:00:07400”),
Text=“欣赏这部电影!”
};
副标题title2=新副标题()
{
StartTime=TimeSpan.Parse(“00:00:07500”),
EndTime=TimeSpan.Parse(“00:00:09500”),
Text=“嗨,我叫玛丽”
};
副标题title3=新副标题()
{
StartTime=TimeSpan.Parse(“00:00:22000”),
EndTime=TimeSpan.Parse(“00:00:25000”),
Text=“你好,我叫约翰。”
};
_副标题:排队(标题1);
_副标题.排队(标题2);
_副标题.排队(标题3);
定时器=新定时器(显示字幕,空,0,100);
while(_currentTime0)
_activeSubtitle=_subtitles.Dequeue();
控制台写入线(_currentTime);
如果(_activeSubtitle!=null)
{
如果(\u currentTime>=\u activeSubtitle.StartTime&&u currentTime=\u activeSubtitle.EndTime)
_activeSubtitle=null;
}
_currentTime=_currentTime.Add(新的时间跨度(0,0,0,0,100));
}
}
内部类字幕
{
公共时间跨度开始时间{get;set;}
公共时间跨度结束时间{get;set;}
公共字符串文本{get;set;}
}
使用时间跨度。 这里是一个简单的控制台项目,用于在正确的时间显示字幕

    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; }
}
类程序
{
专用静态队列字幕;
私有静态字幕_activeSubtitle;
私有静态时间跨度_currentTime=new TimeSpan();
静态void Main(字符串[]参数)
{
_subtitles=新队列();
副标题title1=新副标题()
{
StartTime=TimeSpan.Parse(“00:00:06000”),
EndTime=TimeSpan.Parse(“00:00:07400”),
Text=“欣赏这部电影!”
};
副标题title2=新副标题()
{
StartTime=TimeSpan.Parse(“00:00:07500”),
EndTime=TimeSpan.Parse(“00:00:09500”),
Text=“嗨,我叫玛丽”
};
副标题title3=新副标题()
{
StartTime=TimeSpan.Parse(“00:00:22000”),
EndTime=TimeSpan.Parse(“00:00:25000”),
Text=“你好,我叫约翰。”
};
_副标题:排队(标题1);
_副标题.排队(标题2);
_副标题.排队(标题3);
定时器=新定时器(显示字幕,空,0,100);
while(_currentTime0)
_activeSubtitle=_subtitles.Dequeue();
控制台写入线(_currentTime);
如果(_activeSubtitle!=null)
{
如果(\u currentTime>=\u activeSubtitle.StartTime&&u currentTime=\u activeSubtitle.EndTime)
_activeSubtitle=null;
}
_currentTime=_currentTime.Add(新的时间跨度(0,0,0,0,100));
}
}
内部类字幕
{
公共时间跨度开始时间{get;set;}
公共时间跨度结束时间{get;set;}
公共字符串文本{get;set;}
}

我试过
TimeSpan firstTime=TimeSpan.Parse(“00:00:06000”)但不起作用。有什么想法吗?这是因为在毫秒之前使用了逗号,因为文档中说它应该是像firstTime=TimeSpan.Parse(“00:00:06.000”)那样的点;没问题:)您可以查看“分析备注”部分,其中说明了如何格式化。我尝试了
TimeSpan firstTime=TimeSpan.parse(“00:00:06000”)但不起作用。有什么想法吗?这是因为在毫秒之前使用了逗号,因为文档中说它应该是像firstTime=TimeSpan.Parse(“00:00:06.000”)那样的点;没问题:)您可以查看“解析备注”部分,其中说明了如何格式化。