想在 C# 中得到精确到分钟的 DateTime 类型的值(不是字符串),比如 2019-12-04 11:27
,请问如何用最简短的代码实现?
这是在我们 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);
赞同 @去海边生活 的答案
public static DateTime Fuck(this DateTime time)
{
return time.AddSeconds(-time.Second);
}
毫秒还在
@dudu: 这样?
return time.AddSeconds(-time.Second).AddMilliseconds(-time.Millisecond);
@dudu: 这样?能少调一次Add方法
return time.Date.AddMinutes(time.Hour * 60 + time.Minute);
好像也差不多,少调用了一次Add,但是多调用了一次属性Date。
@会长: 这个的确是目前最简短的代码,比 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));
这个只是显示格式问题,比如 ToString("yyyy-MM-dd HH:mm")
先tostring再parse呗
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"));
}
dt.AddSeconds(-dt.Second);
毫秒还在
dudu大佬这是啥场景下的需求啊,还是对于精致编程的自我要求- -
在补充问题中说明了场景,在博问中提出这个问题是出于精致编程
限制一分钟一篇也可以用时间差>60s来做
– blackheart 4年前