首页 新闻 会员 周边

C# 中得到精确到分钟的 DateTime 的最简短代码

0
悬赏园豆:100 [已解决问题] 解决于 2019-12-05 10:39

想在 C# 中得到精确到分钟的 DateTime 类型的值(不是字符串),比如 2019-12-04 11:27 ,请问如何用最简短的代码实现?

C#
问题补充:

这是在我们 code review 时遇到的一个场景, SQL Server 数据库的字段类型是 smalldatetime ,为了限制1分钟内只能发布1篇,需要传参精确到分钟的当前时间,我们目前2种实现:

实现1:

startTime = DateTime.Parse(startTime.ToString("yyyy-MM-dd HH:mm"));

实现2:

startTime = new DateTime(startTime.Year, startTime.Month, startTime.Day, startTime.Hour, startTime.Minute, 0, DateTimeKind.Local);

stackoverflow 上的相关讨论

参考 stackoverflow 的实现3:

tartTime = new DateTime(startTime.Ticks - (startTime.Ticks % TimeSpan.TicksPerMinute), startTime.Kind);
dudu的主页 dudu | 高人七级 | 园豆:31003
提问于:2019-12-04 11:28

限制一分钟一篇也可以用时间差>60s来做

blackheart 4年前
< >
分享
最佳答案
0

赞同 @去海边生活 的答案

public static DateTime Fuck(this DateTime time)
{
   return time.AddSeconds(-time.Second);
}
收获园豆:50
会长 | 专家六级 |园豆:12401 | 2019-12-04 13:54

毫秒还在

dudu | 园豆:31003 (高人七级) | 2019-12-04 15:44

@dudu: 这样?

 return time.AddSeconds(-time.Second).AddMilliseconds(-time.Millisecond);
会长 | 园豆:12401 (专家六级) | 2019-12-04 18:23

@dudu: 这样?能少调一次Add方法

return time.Date.AddMinutes(time.Hour * 60 + time.Minute);

好像也差不多,少调用了一次Add,但是多调用了一次属性Date。

会长 | 园豆:12401 (专家六级) | 2019-12-04 18:27

@会长: 这个的确是目前最简短的代码,比 DateTime.Parse 少了1个括号

var now = DateTime.Now;
Console.WriteLine(DateTime.Parse(now.ToString("yyyy-MM-dd HH:mm")));
Console.WriteLine(now.Date.AddMinutes(now.Hour * 60 + now.Minute));
dudu | 园豆:31003 (高人七级) | 2019-12-04 18:37
其他回答(5)
0

这个只是显示格式问题,比如 ToString("yyyy-MM-dd HH:mm")

收获园豆:5
gw2010 | 园豆:1487 (小虾三级) | 2019-12-04 11:48
0

先tostring再parse呗

收获园豆:10
Timetombs | 园豆:3954 (老鸟四级) | 2019-12-04 11:48
0

肯定不是最简短,dtForm对象.

static void GetDate()
{
DateTime t = DateTime.Now;
DateTime dtFrom = new DateTime(t.Year, t.Month, t.Day, t.Hour, t.Minute,0);
Console.WriteLine( t.ToString("yyyyMMddHHmmssfff"));
Console.WriteLine(dtFrom.ToString("yyyyMMddHHmmssfff"));

        System.Globalization.CultureInfo Culinfo = System.Globalization.CultureInfo.GetCultureInfo("ZH-CN");
        string dateString = t.ToString("yyyyMMddHHmm");
        DateTime dt = DateTime.ParseExact(dateString, "yyyyMMddHHmm", Culinfo);
        Console.WriteLine(dt.ToString("yyyMMddhhmmssfff"));
    }
收获园豆:10
邀月 | 园豆:25475 (高人七级) | 2019-12-04 11:58
1

dt.AddSeconds(-dt.Second);

收获园豆:20
去海边生活 | 园豆:66 (初学一级) | 2019-12-04 13:01

毫秒还在

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2019-12-04 15:43
0

dudu大佬这是啥场景下的需求啊,还是对于精致编程的自我要求- -

收获园豆:5
猝不及防 | 园豆:2731 (老鸟四级) | 2019-12-04 14:24

在补充问题中说明了场景,在博问中提出这个问题是出于精致编程

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2019-12-04 14:52
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册