DateTime.TryParse只用于Time参数?

Isa*_*son 2 c#

我正在写一个在下午4点和凌晨5点调用方法的服务.我想保持这些时间不被硬编码,所以我想将它们放在我的appconfig中.

这是我的代码:

public bool CheckTime() 
        {
            DateTime startTime;
            DateTime endTime; 

            DateTime.TryParse(ConfigurationManager.AppSettings["ProcessingStartTime"], out startTime);
            DateTime.TryParse(ConfigurationManager.AppSettings["ProcessingEndTime"], out endTime);

            if(DateTime.Now.TimeOfDay.Equals(startTime) || DateTime.Now.TimeOfDay.Equals(endTime))
                return true;
            else
                return false;
        }
Run Code Online (Sandbox Code Playgroud)

但是,因为我只想将时间存储为字符串(就像"下午4点"一样简单),如何解析和封装JUST时间在DateTime对象中?还是有另一个对象?我不关心日期,它只需要是任何给定年份的任何给定周的MF.

多谢你们.

Jon*_*eet 9

您可以使用TryParseExact适当的格式字符串,然后忽略日期..NET中的"只是时间"没有很好的封装.然而,还有另一种选择 - 我一直在Noda Time上努力工作,它的LocalTime类型就是为了这个目的:

// "Traditional" way
LocalTime time;
if (LocalTime.TryParseExact(text, "h:mmtt", out time))
{
    ...
}

// Preferred way

private static readonly LocalTimePattern TimePattern = 
    LocalTimePattern.CreateWithInvariantInfo("h:mmtt");
...

ParseResult<LocalTime> parseResult = TimePattern.Parse(text);
if (parseResult.Success)
{
    LocalTime time = parseResult.Value;
    ...
}
Run Code Online (Sandbox Code Playgroud)

两个旁注:

  • 忽略(或任何其他方法)的返回值几乎永远不合适- 如果数据存在问题,您真的想要使用吗?在某些情况下,默认值是合适的,但它们非常罕见DateTime.TryParseTryParseDateTime.MinValue
  • 请尽量避免使用表单代码:

    if (condition)
        return true;
    else
        return false;
    
    Run Code Online (Sandbox Code Playgroud)

    这更明确地写为:

    return condition;
    
    Run Code Online (Sandbox Code Playgroud)