C# 需要以am pm格式而不是24小时格式显示时间

C# 需要以am pm格式而不是24小时格式显示时间,c#,C#,我有以下以24小时格式返回时间的代码。我想要12小时上午下午的格式 public void LogProcess() { string Reason = null; Console.WriteLine("Enter your name:"); string UserName = Console.ReadLine(); DateTime t = DateTime.Now; int hr = t.Hour;

我有以下以24小时格式返回时间的代码。我想要12小时上午下午的格式

public void LogProcess()
    {
        string Reason = null;
        Console.WriteLine("Enter your name:");
        string UserName = Console.ReadLine();
        DateTime t = DateTime.Now;
        int hr = t.Hour;
        int m = t.Minute;

您可以在这方面指导我吗。

解决方案1:您可以使用
ToString()
函数来获取
日期时间
字符串所需的部分

1.您需要使用small
hh
12
Hour格式获取小时数。 2.您需要使用
tt
获取
AM
PM
字符串

试一试

有关完整时间信息:

DateTime dt = DateTime.Now;
int hours = Convert.ToInt32(dt.ToString("hh"));
int minutes = dt.Minute;
int seconds = dt.Second;
string AMorPM  = dt.ToString("tt");
解决方案2:您可以使用24小时值和12执行mod操作,以获得12小时值

注意:如果结果为
0
,则需要将结果(mod操作后)映射到1

int hours = (dt.Hour % 12 != 0) ? dt.Hour : 1;
string AMorPM  = dt.ToString("tt");

DateTime没有隐式格式,它只是一个
DateTime
值。。但是字符串已经存在。您可以使用with方法获取您的小时的12小时时钟表示形式

var dt = DateTime.Now;
string hr = dt.ToString("hh");
string m =  dt.ToString("mm");
有关更多信息,请参阅


MSDN文档:如果您想要值(即3而不是15),只需执行
(dateHour%12)
@germ:Nope,这不会提供正常的12小时格式,即1-12,而不是0-11。@germi为什么?已经有一个工具可以获取正确的值。@JonSkeet啊,对了。我从不使用它,只想到午夜,在这种情况下,我通常说0:。。。但是你当然是对的。@Bharadwaj:是的,这是有效的,但是OP试图将单个单位捕获到seprate变量中。转换为字符串并返回是获取小时/分钟/秒部分的一种非常糟糕的方式。@Sudhakardipudi是的,但是我在OP的问题中看到了
我想要12小时am pm格式的
。@Jonsket:我同意jon,但是为了在12小时fomrat中获得小时数,我找不到更好的方法。@Sudhakartrapudi:我会使用
DateTime.hour%12
然后使用特例0->12映射。除非你不应该调用
DateTime,因为时间可能在两者之间变化。例如,在下午3点左右,你可能会以“2”和“0”结束,而不是“2”和“59”或“3”和“0”。@JonSkeet噢,说得好,Jon。更新。谢谢
var dt = DateTime.Now;
string hr = dt.ToString("hh");
string m =  dt.ToString("mm");