目前我正在尝试使用此代码获取时间和分钟:
DateTime currentDate = DateTime.Now.Date;
int currentHour = DateTime.Now.Date.Hour;
int currentMin = DateTime.Now.Date.Minute;
Run Code Online (Sandbox Code Playgroud)
但是我得到零而不是当前的时间和分钟.我该如何解决这个问题?
Jon*_*eet 18
您正在使用Date
在给定DateTime给您午夜的属性.你现在只想要:
DateTime now = DateTime.Now;
int hour = now.Hour;
int minute = now.Minute;
DateTime date = now.Date; // If you really need it
Run Code Online (Sandbox Code Playgroud)
请注意,我的代码只调用DateTime.Now
一次,而不是一次几小时,然后一次是分钟1.这意味着如果你把它称为接近(比如)上午8点,你可能会得到7:59或者你可能会得到8点 - 但你不会得到7:00或8:59,如果你有,你可以得到其中任何一个:
// Bad option 1 (could get 7:00)
int hour = DateTime.Now.Hour;
// Imagine the clock rolls over now...
int minute = DateTime.Now.Minute;
// Bad option 1 (could get 8:59)
int minute = DateTime.Now.Minute;
// Imagine the clock rolls over now...
int hour = DateTime.Now.Hour;
Run Code Online (Sandbox Code Playgroud)
你也应该考虑不要DateTime.Now
直接使用.它有两个问题:
如果您创建一个IClock
具有方法或属性的接口或类似的东西来为您提供当前的UTC时间,您可以随时将其转换为本地时间(明确地,反之则不然)并且您也可以注入用于测试目的的虚假实现.
编辑:一个简短而完整的程序,证明是,这个代码真的做的工作:
using System;
public class Test
{
static void Main(string[] args)
{
DateTime now = DateTime.Now;
int hour = now.Hour;
int minute = now.Minute;
Console.WriteLine(hour);
Console.WriteLine(minute);
}
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,它打印7然后打印35.如果打印0然后打印0,那么它必须在您的机器上午夜.
1正如您可能注意到的那样,我已经对所有继续执行此操作的答案添加了评论.抱歉,如果这看起来像垃圾邮件,但我想引起那些回答者的注意 - 这是一个常见的错误,我想帮助根除.如果没有评论,海报可能会继续前进,而不会再看一遍......
归档时间: |
|
查看次数: |
8066 次 |
最近记录: |