C# Datetime格式的数据,怎么去掉时分秒,只要年月日。

xliumaox 2019-04-02 03:47:42
试了各种方法,最后转为Datetime格式的时候,都会变的有时分秒。请注意,我不要string格式。
...全文
6179 68 打赏 收藏 转发到动态 举报
写回复
用AI写文章
68 条回复
切换为时间正序
请发表友善的回复…
发表回复
six2me 2021-04-27
  • 打赏
  • 举报
回复 1
他既然要求的是datetime ,就可以使用datetime.date,来完成,还是datetime,没有时分秒(时分秒都为0)。
morliz子轩 2021-04-26
  • 打赏
  • 举报
回复
CSharp就没有Date类型,用转短日期类型转换就行了。 Datetime是长日期型格式,只是呈现的时候,是可以进行格式处理的。 比方说:DataTime.Now.ToShortDate.String();
花翎HL 2021-04-25
  • 打赏
  • 举报
回复
楼主解决了吗,我也遇到这个问题了
  • 打赏
  • 举报
回复
引用 51 楼 baidu_27549073 的回复:
另外,2,21,23楼对的才是标准做法

楼主的意思是显示为年月日,没有时分秒,有00:00:00也不可以,况且是datetime类型。自带的Date属性做不到这点
hztltgg 2019-04-04
  • 打赏
  • 举报
回复
引用 64 楼 橘子皮zzz 的回复:
这么简单的问题这么多人回答,我的问题却没一个人回答,真是无语。。。。
这个问题太基础了,大家都在看笑话吧,你的问题可能有点难。
外星人 2019-04-04
  • 打赏
  • 举报
回复
6666666666
wanghui0380 2019-04-04
  • 打赏
  • 举报
回复
说个笑话“我把电视机拆了,咋就没看到里面的小人呢?我就是要小人玩,就是不想隔着块玻璃看”
m38384934 2021-12-22
  • 举报
回复
@wanghui0380 好冷的笑话
橘子皮... 2019-04-04
  • 打赏
  • 举报
回复
这么简单的问题这么多人回答,我的问题却没一个人回答,真是无语。。。。
groveer 2019-04-04
  • 打赏
  • 举报
回复
引用 19 楼 xliumaox的回复:
[quote=引用 17 楼 stherix 的回复:]
[quote=引用 15 楼 xliumaox 的回复:]
哎 就是有关系,才这么大费周章的嘛。


你可以把具体代码贴出来,看看是哪里不能有时分秒,才能知道解决办法[/quote]

???我就是不会,才问的啊[/quote] 请把你会的写出来,然后说出要应用的场景和需求
/*空山*/ 2019-04-04
  • 打赏
  • 举报
回复
ToShortDateString()
奇点码农 2019-04-04
  • 打赏
  • 举报
回复
你可以自己写一个类自己进行转换一下,或者不写类也可以,直接加一个类型转换就行了
baidu_27549073 2019-04-04
  • 打赏
  • 举报
回复 1
引用 68 楼 不删库绝不跑路 的回复:
楼主的意思是显示为年月日,没有时分秒,有00:00:00也不可以,况且是datetime类型。自带的Date属性做不到这点
Date属性不具有00:00:00。 dateTime类型和字符串没有任何关系。 Datetime和string不是一个东西
a456890000 2019-04-03
  • 打赏
  • 举报
回复
DateTime格式的数据,存的是一个四个整型量长度的数值,类提供了对此数值的解析服务。对系统来说,这样做的开销不大、却能够简化许多种操作,同时因为是规范化的操作、所以速度也会比搞得很复杂快许多。
luj_1768 2019-04-03
  • 打赏
  • 举报
回复
DateTime格式的数据,存的是一个四个整型量长度的数值,类提供了对此数值的解析服务。对系统来说,这样做的开销不大、却能够简化许多种操作,同时因为是规范化的操作、所以速度也会比搞得很复杂快许多。
u010716819 2019-04-03
  • 打赏
  • 举报
回复
DateTime time = DateTime.Now;
label1.Text = time.ToString("yyyy年MM月dd日");
  • 打赏
  • 举报
回复
引用 42 楼 FainSheeg 的回复:
[quote=引用 39 楼 智者知已应修善业 的回复:] [quote=引用 37 楼 FainSheeg 的回复:] [quote=引用 9 楼 智者知已应修善业 的回复:] 说奇道奇就是奇,为何把别的弄到月份去?是很奇!
月份是MM,mm是分钟,不是什么把别的弄到月份去,你弄错了而已。[/quote] 我是大意了忘记切换大写键了,但是我觉得微软至少应该改个写法才不易造成混乱,就如改用Year Month Day这样比较统一.否则的话,我可以随意写时分秒也能组成年月日![/quote]额,这样设计不就是为了能够按程序猿想要的格式来显示日期和时间么,具体想要怎么显示那是程序猿的事,你要非得把时分秒显示 到年月日去那也是你自己的事啊,都弄成了个统一的格式,程序猿没法自定义那才真的是搞笑了,到时人家又得嘲笑.net程序猿就是拉控件了。[/quote] 不过是个名称统一而已,没那么闹.
FainSheeg 2019-04-03
  • 打赏
  • 举报
回复
引用 39 楼 智者知已应修善业 的回复:
[quote=引用 37 楼 FainSheeg 的回复:]
[quote=引用 9 楼 智者知已应修善业 的回复:]
说奇道奇就是奇,为何把别的弄到月份去?是很奇!

月份是MM,mm是分钟,不是什么把别的弄到月份去,你弄错了而已。[/quote]
我是大意了忘记切换大写键了,但是我觉得微软至少应该改个写法才不易造成混乱,就如改用Year Month Day这样比较统一.否则的话,我可以随意写时分秒也能组成年月日![/quote]额,这样设计不就是为了能够按程序猿想要的格式来显示日期和时间么,具体想要怎么显示那是程序猿的事,你要非得把时分秒显示 到年月日去那也是你自己的事啊,都弄成了个统一的格式,程序猿没法自定义那才真的是搞笑了,到时人家又得嘲笑.net程序猿就是拉控件了。
小灰狼 2019-04-03
  • 打赏
  • 举报
回复
引用 26 楼 起个名字忒难 的回复:
楼主也真是,你倒是说你为什么不要这个时分秒啊?
就是 楼主应该说清楚,为什么不要时分秒,这些内容碍楼主你什么事了? 说清楚,可以想别的办法,别在这一棵树上吊死
samicefish 2019-04-03
  • 打赏
  • 举报
回复
可以使用,下载留存!
  • 打赏
  • 举报
回复
引用 37 楼 FainSheeg 的回复:
[quote=引用 9 楼 智者知已应修善业 的回复:] 说奇道奇就是奇,为何把别的弄到月份去?是很奇!
月份是MM,mm是分钟,不是什么把别的弄到月份去,你弄错了而已。[/quote] 我是大意了忘记切换大写键了,但是我觉得微软至少应该改个写法才不易造成混乱,就如改用Year Month Day这样比较统一.否则的话,我可以随意写时分秒也能组成年月日!
加载更多回复(47)
PowerBI系列之Power Query专题1.  获取数据 数据源种类介绍和获取Excel数据源输入数据和拷贝数据:创建辅助表解析Json/XML数据格式获取Web网页数据和URL添加动态参数连接数据的四种模式:Import、DirectQuery、Live Connection、Dual双 属于混合模式连接数据库:Sql server、 Mysql(直连但是必须先安装一个mysql插件)DirectQuery直连查询:Sql serverODBC方式获取数据表关联或多个Sql或调用存储过程获取数据SQL中动态传参和自定义函数: sql中使用参数或数据库名称使用参数连接Sharepoint和OneDrive数据源连接Dataset和Dataflow 替换本地数据源为Sharepoint数据源并保留数据处理操作 终止当前数据刷新Loading:Cancel Query数据源设置-重置数据连接凭证PBIDS连接数据源创建和使用报表模块(输入或值列表)利用报表模板和参数控制线下报表数据权限DirectQuery启用自动页面刷新和更改检测管理聚合表提高DirectQuery查询性能动态M查询参数提高DirectQuery查询性能添加数据刷新时间 DateTime.LocalNow()和Getdate()2.  数据清洗和M语言M语言和官方文档介绍PowerQuery中查阅M函数:=#shared, Ctrl+Space提示数据清洗之常用技能:提升标题、更改数据类型、保留删除错误或空行,删除重复项、选择列和删除列、填充单元格、合并列、拆分、提取、替换、条件替换、添加自定义列,添加条件列、添加索引列、分组、添加年月日列、追加和合并查询透视和逆透视以及转置合并单元格的Excel文件处理导入文件夹中多Excel文件并合并解决多文件合并中列顺序不一致使用参数和函数批量导入文件 文本中提取中文、英文、数字等处理双引号转义 列拆分详解解决列名改变错误解决列丢失错误动态显示、排序和重命名列为所有列名添加前缀列名字母大写和分隔符调整Trim标题列中的多余空格如何处理load数据错误为什么load的Excel数据有null空行为什么load的Excel数据标题在第二行灵活添加占位符规范同类相似数据数据按多列排序为分组添加Index序号分组内值合并诊断工具分析数据处理过程PowerQuery小技巧分享 新冠病例活动轨迹地图标识 
1 概述 首先需要说明的一点,无论是Winform,还是Webform,都有很成熟的日历控件,无论从易用性还是可扩展性上看,日期的选择和校验还是用日历控件来实现比较好。 前几天在CSDN多个版块看到需要日期正则的帖子,所以整理了这篇文章,和大家一起讨论交流,如有遗漏或错误的地方,还请大家指正。 日期正则一般是对格式有要求,且数据不是直接由用户输入时使用。因应用场景的不同,写出的正则也不同,复杂程度也自然不同。正则的书写需要根据具体情况具体分析,一个基本原则就是:只写合适的,不写复杂的。 对于日期提取,只要能与非日期区分开,写最简单的正则即可,如 \d{4}-\d{2}-\d{2} 如果可以在源字符串中唯一定位yyyy-MM-dd格式的日期,则可用做提取。 对于验证,如果仅仅是验证字符组成及格式是没有多大意义的,还要加入对规则的校验。由于闰年的存在,使得日期的校验正则变得比较复杂。 先来考察一下日期的有效范围以及什么是闰年。 2 日期的规则 2.1 日期的有效范围 对于日期的有效范围,不同的应用场景会有所不同。 MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。 UNIX时间戳的0按照ISO 8601规范为 :1970-01-01T00:00:00Z。 而实际应用中,日期的范围基本上不会超出DateTime所规定的范围,所以正则验证取其中常用的日期范围即可。 2.2 什么是闰年 (以下摘自百度百科) 闰年(leap year)是为了弥补因人为历法规定造成的年度天数与地球实际公转周期的时间差而设立的。补上时间差的年份为闰年。 地球绕日运行周期为365天5小时48分46秒(合365.24219天),即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,每四年累积约一天,把这一天加于2月末(即2月29日),使当年时间长度变为366日,这一年就为闰年。 需要注意的是,现在的公历是根据罗马人的“儒略历”改编而得。由于当时没有了解到每年要多算出0.0078天的问题,从公元前46年,到16世纪,一共累计多出了10天。为此,当时的教皇格雷果里十三世,将1582年10月5日人为规定为10月15日。并开始了新闰年规定。即规定公历年份是整百数的,必须是400的倍数才是闰年,不是400的倍数的就是平年。比如,1700年、1800年和1900年为平年,2000年为闰年。此后,平均每年长度为365.2425天,约4年出现1天的偏差。按照每四年一个闰年计算,平均每年就要多算出0.0078天,经过四百年就会多出大约3天来,因此,每四百年中要减少三个闰年。闰年的计算,归结起来就是通常说的:四年一闰;百年不闰,四百年再闰。 2.3 日期的格式 根据不同的语言文化,日期的连字符会有所不同,通常有以下几种格式: yyyyMMdd yyyy-MM-dd yyyy/MM/dd yyyy.MM.dd 3 日期正则表达式构建 3.1 规则分析 写复杂正则的一个常用方法,就是先把不相关的需求拆分开,分别写出对应的正则,然后组合,检查一下相互的关联关系以及影响,基本上就可以得出对应的正则。 按闰年的定义可知,日期可以有几种分类方法。 3.1.1 根据天数是否与年份有关划分为两类 与年份无关的一类中,根据每月天数的不同,又可细分为两类  1、3、5、7、8、10、12月为1-31日  4、6、9、11月为1-30日 与年份有关的一类中  平年2月为1-28日  闰年2月为1-29日 3.1.2 根据包含日期不同可划分为四类  所有年份的所有月份都包含1-28日  所有年份除2月外都包含29和30日  所有年份1、3、5、7、8、10、12月都包含31日  闰年2月包含29日 3.1.3 分类方法选择 因为日期分类之后的实现,是要通过(exp1|exp2|exp3)这种分支结构来实现的,而分支结构是从左侧分支依次向右开始尝试匹配,当有一个分支匹配成功时,就不再向右尝试,否则尝试所有分支后并报告失败。 分支的多少,每个分支的复杂程度都会影响匹配效率,考虑到被验证日期概率分布,绝大多数都是落到1-28日内,所以采用第二种分类方法,会有效提高匹配效率。 3.2 正则实现 采用3.1.2节的分类方法,就可以针对每一个规则写出对应的正则,以下暂按MM-dd格式进行实现。 先考虑与年份无关的前三条规则,年份可统一写作 (?!0000)[0-9]{4} 下面仅考虑月和日的正则  包括平年在内的所有年份的月份都包含1-28日 (0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])  包括平年在内的所有年份除2月外都包含29和30日 (0[13-9]|1[0-2])-(29|30)  包括平年在内的所有年份1、3、5、7、8、10、12月都包含31日 (0[13578]|1[02])-31) 合起来就是除闰年的2月29日外的其它所有日期 (?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31) 接下来考虑闰年的实现  闰年2月包含29日 这里的月和日是固定的,就是02-29,只有年是变化的。 可通过以下代码输出所有的闰年年份,考察规则 for (int i = 1; i < 10000; i++) { if ((i % 4 == 0 && i % 100 != 0) || i % 400 == 0) { richTextBox2.Text += string.Format("{0:0000}", i) + "\n"; } } 根据闰年的规则,很容易整理出规则,四年一闰; ([0-9]{2}(0[48]|[2468][048]|[13579][26]) 百年不闰,四百年再闰。 (0[48]|[2468][048]|[13579][26])00 合起来就是所有闰年的2月29日 ([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29) 四条规则都已实现,且互相间没有影响,合起来就是所有符合DateTime范围的日期的正则 ^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$ 考虑到这个正则表达式仅仅是用作验证,所以捕获组没有意义,只会占用资源,影响匹配效率,所以可以使用非捕获组来进行优化。 ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$ 以上正则年份0001-9999,格式yyyy-MM-dd。可以通过以下代码验证正则的有效性和性能 DateTime dt = new DateTime(1, 1, 1); DateTime endDay = new DateTime(9999, 12, 31); Stopwatch sw = new Stopwatch(); sw.Start(); Regex dateRegex = new Regex(@"^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$"); //Regex dateRegex = new Regex(@"^((?!0000)[0-9]{4}-((0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-8])|(0[13-9]|1[0-2])-(29|30)|(0[13578]|1[02])-31)|([0-9]{2}(0[48]|[2468][048]|[13579][26])|(0[48]|[2468][048]|[13579][26])00)-02-29)$"); Console.WriteLine("开始日期: " + dt.ToString("yyyy-MM-dd")); while (dt < endDay) { if (!dateRegex.IsMatch(dt.ToString("yyyy-MM-dd"))) { Console.WriteLine(dt.ToString("yyyy-MM-dd") + " false"); } dt = dt.AddDays(1); } if (!dateRegex.IsMatch(dt.ToString("yyyy-MM-dd"))) { Console.WriteLine(dt.ToString("yyyy-MM-dd") + " false"); } Console.WriteLine("结束日期: " + dt.ToString("yyyy-MM-dd")); sw.Stop(); Console.WriteLine("测试用时: " + sw.ElapsedMilliseconds + "ms"); Console.WriteLine("测试完成!"); Console.ReadLine(); 4 日期正则表达式扩展 4.1 “年月日”形式扩展 以上实现的是yyyy-MM-dd格式的日期验证,考虑到连字符的不同,以及月和日可能为M和d,即yyyy-M-d的格式,可以对以上正则进行扩展 ^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])([-/.]?)(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])([-/.]?)(?:29|30)|(?:0?[13578]|1[02])([-/.]?)31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2([-/.]?)29)$ 使用反向引用进行简化,年份0001-9999,格式yyyy-MM-dd或yyyy-M-d,连字符可以没有或是“-”、“/”、“.”之一。 ^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)([-/.]?)0?2\2(?:29))$ 这就是“年月日”这种形式最全的一个正则了,不同含义部分以不同颜色标识,可以根据自己的需要进行栽剪。 4.2 其它形式扩展 了解了以上正则各部分代表的含义,互相间的关系后,就很容易扩展成其它格式的日期正则,如dd/MM/yyyy这种“日月年”格式的日期。 ^(?:(?:(?:0?[1-9]|1[0-9]|2[0-8])([-/.]?)(?:0?[1-9]|1[0-2])|(?:29|30)([-/.]?)(?:0?[13-9]|1[0-2])|31([-/.]?)(?:0?[13578]|1[02]))([-/.]?)(?!0000)[0-9]{4}|29([-/.]?)0?2([-/.]?)(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00))$ 这种格式需要注意的就是不能用反向引用来进行优了。连字符等可根据自己的需求栽剪。 4.3 添加时间的扩展 时间的规格很明确,也很简单,基本上就HH:mm:ss和H:m:s两种形式。 ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9] 合入到日期的正则中,yyyy-MM-dd HH:mm:ss ^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)\s+([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$ 4.4 年份定制 以上所有涉及到平年的年份里,使用的是0001-9999。当然,年份也可以根据闰年规则定制。 如年份1600-9999,格式yyyy-MM-dd或yyyy-M-d,连字符可以没有或是“-”、“/”、“.”之一。 ^(?:(?:1[6-9]|[2-9][0-9])[0-9]{2}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|(?:0?[13578]|1[02])\1(?:31))|(?:(?:1[6-9]|[2-9][0-9])(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)([-/.]?)0?2\2(?:29))$ 5 特别说明 以上正则采用的是最基本的正则语法规则,绝大多数采用传统NFA引擎的语言都可以支持,包括JavaScript、Java、.NET等。 另外需求说明的是,虽然日期的规则相对明确,可以采用这种方式裁剪来得到符合要求的日期正则,但是并不推荐这样使用正则,正则的强大在于它的灵活性,可以根据需求,量身打造最合适的正则,如果只是用来套用模板,那正则也就不称其为正则了。 正则的语法规则并不多,而且很容易入门,掌握语法规则,量体裁衣,才是正则之“道”。

110,499

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧