加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使用当前文化定义的12或24小时格式,从DateTime获取一小时

发布时间:2020-12-15 18:27:13 所属栏目:百科 来源:网络整理
导读:.Net内置了DateTime的ToShortTimeString()函数,该函数使用CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern格式.它为en-US返回:“下午5:00”.对于24小时文化,如de-DE,它将返回“17:00”. 我想要的只是一个方法,只要返回一小时(所以上面的例子中
.Net内置了DateTime的ToShortTimeString()函数,该函数使用CultureInfo.CurrentCulture.DateTimeFormat.ShortTimePattern格式.它为en-US返回:“下午5:00”.对于24小时文化,如de-DE,它将返回“17:00”.

我想要的只是一个方法,只要返回一小时(所以上面的例子中的“下午5点”和“17”)适用于每一种文化.什么是最好的/最干净的方式来做到这一点?

谢谢!

解决方法

// displays "15" because my current culture is en-GB
Console.WriteLine(DateTime.Now.ToHourString());

// displays "3 pm"
Console.WriteLine(DateTime.Now.ToHourString(new CultureInfo("en-US")));

// displays "15"
Console.WriteLine(DateTime.Now.ToHourString(new CultureInfo("de-DE")));

// ...

public static class DateTimeExtensions
{
    public static string ToHourString(this DateTime dt)
    {
        return dt.ToHourString(null);
    }

    public static string ToHourString(this DateTime dt,IFormatProvider provider)
    {
        DateTimeFormatInfo dtfi = DateTimeFormatInfo.GetInstance(provider);

        string format = Regex.Replace(dtfi.ShortTimePattern,@"[^hHts]","");
        format = Regex.Replace(format,@"s+"," ").Trim();

        if (format.Length == 0)
            return "";

        if (format.Length == 1)
            format = '%' + format;

        return dt.ToString(format,dtfi);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读