如何在没有格式化为字符串的情况下获得24的时间

时间:2017-12-14 17:14:10

标签: c# datetime

我正在尝试比较当前时间,看它是否过了16小时(下午4点)

int temps = new TimeSpan(16, 0, 0).Hours;
 int now = DateTime.Now.TimeOfDay.Hours;
 int result=1;

            if (now > temps)
                result = 2;

但如果我希望{14}显示像这样14小时或15小时而不必这样做

now

因为我需要将它与now.ToString("MM/dd/yyyy HH:mm") 进行比较,所以我需要它作为整数

有可能吗?我的所有研究都建议我使用字符串格式

我试过:temps显示17小时,但问题是它是在英国和我住在加拿大的时间

1 个答案:

答案 0 :(得分:2)

DateTime始终以相同的方式在内部存储,无论它如何显示。无论何时看到日期,都意味着已经转换为字符串并进行格式化。即使在调试器中!您看到的只是存储为数字的真实 DateTime的临时表示。

DateTime.Hour Property的文档说:

  

Hour属性的值始终使用24小时制表示。

此真实DateTime在内部存储为自参考日期起经过的时间。 DateTime Structure的文档说:

  

时间值以称为刻度线的100纳秒单位测量,特定日期是GregorianCalendar日历中自公元0001年1月1日午夜12:00起的刻度数(不包括将添加的刻度)闰秒)。例如,刻度值31241376000000000L表示日期,星期五,1月1日,0100 12:00:00午夜。

你可以写

int now = DateTime.Now.Hour; // Always expressed using a 24-hour clock.
int result = 1;

if (now > 16)
    result = 2;

或更简洁

int result = DateTime.Now.Hour > 16 ? 2 : 1;

如果您想要当地时间,请不要使用NowUTC。这产生了曾经被称为Greenwich Mean Time (GMT)的东西。

相关问题