诡异的DateTime.TryParseExact方法

老赵在介绍Routing扩展的WebCast中出了点“小状况”,即将DateTime.ToString(“yyyy-MM-dd”)修改为DateTime.ToString(“yyyy/MM/dd”)后,页面中仍然显示为yyyy-MM-dd样式的日期格式。相信看过WebCast的同学都还记得吧。我不解,将老赵代码中DateTimeFotmatter的Formate属性修改为yyyy/MM/dd,在页面中输入yyyy-MM-dd样式的日期,仍然没有抛出任何异常。这是怎么回事?难道日期转换失灵了吗?

老赵在做日期转换时,使用了DateTime.TryParseExact,那么我们就来看看这个TryParseExact是否在正常工作。

DateTime output;
DateTime.TryParseExact("2009-06-04", "yyyy/MM/dd", null, DateTimeStyles.None, out output);
Console.WriteLine(output.ToString());

以上代码的输出结果果然让人大跌眼镜,日期居然能正确转换!

image

难道TryParseExact的第二个参数format没有作用吗?将/改成.,居然又不能转换了:

image

看来是/这个符号的问题。请出Reflector,将mscorlib.dll反编译,找到DateTime.TryParseExact方法,一步一步跟进去。发现如果该方法的IFormatProvider参数为null,将获取当前线程的CultureInfo的DateTimeFormat属性作为IFormatProvider,然后在DateTimeParse.ParseByFormat方法中,遇到format参数的/字符时,会比较输入日期字符串的当前字符是否为当前DateTimeFormatInfo的DateSeperator,如果是,则返回true,即允许转换,如果不是则返回false。

CultureInfo cultureInfo = Thread.CurrentThread.CurrentCulture;
Console.WriteLine(cultureInfo.DateTimeFormat.DateSeparator);

而以上代码输出的恰恰为-,也就是说当前线程的区域信息中,日期分隔符即为-,因此,转换得以成功。

如果您使用

DateTimeFormatInfo dtfi = new CultureInfo("zh-CN", false).DateTimeFormat;
DateTime output;
DateTime.TryParseExact("2009-06-04", "yyyy/MM/dd", dtfi, DateTimeStyles.None, out output);
Console.WriteLine(output.ToString());

则转换失败,因为在初始化CultureInfo时,第二个参数为false意味着不使用用户选定的区域性设置,而使用默认的设置,这时的DateSeparator为/

至此,谜底全部解开。

// 小贴士:遇到.NET Framework内部实现的问题时,使用Reflector反编译类库并查看源代码的方式,往往可以解决您的问题:)

转载于:https://www.cnblogs.com/kirinboy/archive/2009/06/04/1496258.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363200.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iSlide——图标库、图示库的用法

iSlide中,有一个“图示库”功能,主要功能是同时排列多块文字或多张图片。单击插图库,会弹出一个新的对话框。从中,可以选择权限、分类、数量数据和样式,也可以直接搜索。 下面就举一个例子:我要开一个班队会…

查看系统剩余空间

1.剩余空间:df -h 2.追踪最耗费硬盘的文件位置 cd /du -h --max-depth1 | sort -rn 转载于:https://www.cnblogs.com/xiaobiaomei/p/10669159.html

『ExtJS』01 001. ExtJS 4 类的定义

ExtJS 4 类的定义类的定义与类方法的调用 样例代码// Define new class Vehicle under the Cookbook namespaceExt.define(Cookbook.Vehicle, {// class configuration goes hereManufacturer : Aston Martin,Model : Vanquish,getDetails : function() {alert(I am an this…

使用C#調用外部程式或是執行DOS命令

在.NET裡要如何調用外部程式呢?? 在.net裡,提供了Process類,提供我們強大的調用外部工具功能,並透過重新導向輸入與輸出,可以取得執行結果,下面就用一個例子來示範在一個WinForm裡輸入一個Dos命令,然後呼…

SQLiteOpenHelper+ContentProvider的使用

效果图: PetDbHelper package com.example.admin.pets;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import com.example.admin.pets.PetContract.PetEntry;public class PetDb…

[Mac入门] 如果更快的打开程序或文件

今天有位网友问我在Windows下可以用CtrlR快速打开程序/文件夹等,在Mac下有没有相类似的功能?本文将介绍一些我的一般做法。 1.Windows下的CtrlR是什么? 我打算从解释CtrlR开始说起,希望朋友们别嫌烦~。Windows下系统全…

ActiveMQ –经纪人网络解释–第4部分

在前面的第3部分中 ,我们已经看到ActiveMQ如何帮助将远程使用者与本地使用者区分开来,这有助于确定从消息生产者到使用者的较短路径。 在第4部分中,我们将研究如何在远程代理上负载均衡并发使用者。 让我们考虑一些高级配置,以平…

总结CSS3新特性(选择器篇)

CSS3新增了嗯- -21个选择器,脚本通过控制台在这里运行; ~: p ~ p {color : red;/*此条规则将用于p后边所有的p...就是除了第一个p的所有p,规则同p:not(:nth-of-type(1)),但是权重要低于后者*/} [attribute^value]: 选择该属性以特定值开头的元素 [attribute$value]: 选择该属…

工作流的设计,业务流程图的绘制与编辑,工作流软件,工作流源代码组件库,开发平台,开发引擎...

基于业务流程的工作流系统在当前的软件工业中占据着非常重要的部分,开发此类系统, 最困难的部分就是业务流程建模和电子表单的可视化界面部分,这部分界面要求有快速的响应时间, 完善的逻辑关系,以及根据需求不断变化而必须具备的灵活编辑功能. E-Form可视化图形源码…

Ajax全接触(1)

Ajax全称:Asynchronous JavaScript and XML(异步的JavaScript和XML) .Ajax不是某种编程语言 是一种在无需重新加载整个网页的情况之下能够更新部分网页的技术。 后面引入XMLHttpRequest对象用于后台和服务器交换数据,可以在不重新加载整个页面的前提下…

关于hibernate字段映射@colunm出现的问题以及jpa驼峰大写转_小写的问题探究

关于hibernate字段映射colunm出现的问题以及jpa驼峰大写转_小写的问题探究2018年04月24日 15:47:26 守望dfdfdf 阅读数:735 标签: colunmhibernate表映射实体类 更多个人分类: 工作 问题编辑版权声明:本文为博主原创文章&#xff…

LeetCode 上最难的链表算法题,没有之一!

题目来源于 LeetCode 第 23 号问题:合并 K 个排序链表。 该题在 LeetCode 官网上有关于链表的问题中标注为最难的一道题目:难度为 Hard ,通过率在链表 Hard 级别目前最低。 题目描述 合并 k 个排序链表,返回合并后的排序链表。请分…

处理Akka应用程序中的每个事件

这里的事件,那里的事件,到处都是事件。 发布有关检查每一项Akka事件最终都能找到归宿的信息。 Akka和基于事件的反应式应用程序是创建软件的新方法。 在当前基于Scala的项目中,我们非常密集地使用Akka。 事件非常适合我们的用例,…

使用IntelliJ ..达2周,到目前为止一切正常

几乎已经过去了2个星期,我已经完全切换到IntelliJ作为我在家里和工作中的主要Java IDE。 到目前为止一切顺利,这是我的初步发现。 迁移 :我花了几个小时来迁移项目。 最终,如果您的项目已经Mavenized,事情就简单了&am…

WEB框架研究笔记一(准备)

DELPHI框架基本完成之后,开发一个WEB框架的想法越来越强烈,一直以来没有过完整的开发过一个WEB项目,这几年来,也就看过几个WEB的产品,了解了一下Struts,去年研究了一下DORADO,顺便了解了SpringH…

备份文件夹

用到的API和数据结构&#xff1a; WINDOWS数据结构&#xff1a; WIN32_FIND_DATA WINDOWS API&#xff1a; FindFirstFile FindNextFile CompareFileTime CopyFIle DeleteFile View Code #include <windows.h> #include <iostream> #include <string> using…

面试整理(1):原生ajax

接到电话面试&#xff0c;有一些送分题答的不好&#xff0c;在这里整理一下 问题&#xff1a;原生ajax的工作流程是怎么样的&#xff1f; 老用封装好的工具&#xff0c;原生的ajax其实并不熟悉&#xff0c;今天复习一下。主要参考http://www.w3school.com.cn/ajax/ 要发一个…

QT

Qt软件 Qt是一个跨平台的C图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的&#xff0c;很容易扩展&#xff0c;并且允许真正地组件编程。 自从1996年早些时候&#xff0c;Qt进入商业领域&#xff0c;它已经成为全…

js获得页面鼠标位置

1.客户区坐标位置&#xff1a;clientX&#xff0c;clientY 鼠标相对于在当前页面可视范围左上角的位置 2.页面坐标位置&#xff1a;pageX,pageY 鼠标相对于页面左上角的位置&#xff08;受滑动等影响&#xff0c;例如pageYclientY scrollTop&#xff09; 3.屏幕坐标位置&#x…

针对新手的Java EE7和Maven项目–第7部分

从前面的部分恢复 第1 部分 &#xff0c; 第2 部分 &#xff0c; 第3 部分 &#xff0c; 第4 部分 &#xff0c; 第5 部分 &#xff0c; 第6部分 在上一篇文章&#xff08;第6章&#xff09;中&#xff0c;我们发现了如何使用Arquillian和Wildfly 8.1进行单元测试JPA2域模型。…