解释日期:Console.Writeline 与 string.Format

2024-04-12

给出以下 C# 代码:

var dt = DateTime.Now;
Console.WriteLine("{0:MM/dd/yy} ... {1}", dt, string.Format("{0:MM/dd/yy}", dt));

...当短日期(在 Windows 7 下,Control Panel -> Region and Language -> Additonal Settings -> Date)设置为美国标准“M/d/yyyy,”我明白了:

06/17/14 ... 06/17/14

但是,当我将短日期更改为“ddd dd MMM yyyy,”我明白了:

06/17/14 ... 06 17 14

我的印象是Console.WriteLine and string.Format始终为字符串格式DateTime值相同。这种差异的解释是什么?

EDIT:看起来这种情况只发生在标准单元测试输出(Visual Studio)中,这就是我最初看到问题的地方。当代码在控制台应用程序中执行时,输出为06 17 14 ... 06 17 14.


出现这种情况是因为当 MSTest 将控制台输出重定向到测试窗口时,它通过CultureInfo.InvariantCulture to the TextWriter与控制台关联。

您可以通过以下方式验证这一点:

var threadCulture = Thread.CurrentThread.CurrentCulture;
var consoleCulture = Console.Out.FormatProvider;

Console.WriteLine(threadCulture.Equals(CultureInfo.InvariantCulture));
Console.WriteLine(consoleCulture.Equals(CultureInfo.InvariantCulture));

除非你改变它,否则线程的当前文化通常是这样的en-US,或者您的计算机设置的任何内容。所以第一项通常是假的。

但第二个项目根据其运行位置而有所不同。作为控制台应用程序,控制台输出区域性应默认为当前线程区域性 - 因此它将为 false。在 XUnit 或 NUnit 测试中,结果也是错误的。但在MSTest中,结果是正确的。

如果你挖掘.NET框架参考源 http://referencesource.microsoft.com/,你会看到

  • Console.WriteLine calls Out.WriteLine http://referencesource.microsoft.com/#mscorlib/system/console.cs#2113

  • Out is a TextWriter, and TextWriter.WriteLine使用其指定的FormatProvider http://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs#523

  • The FormatProvider或者是null使用当前线程 http://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs#113, or is 由构造函数参数分配 http://referencesource.microsoft.com/#mscorlib/system/io/textwriter.cs#113.

我认为 MSTest 测试运行程序的源代码不是公开的,但可以得出结论,它们必须在某处执行以下操作:

Console.Out = new SomeWriter(CultureInfo.InvariantCulture);

Where SomeWriter创建测试输出并继承自TextWriter.

另一方面,String.Format将始终使用线程的当前区域性,除非您专门提供不同的区域性。

解决此问题的一种方法是将线程的当前区域性显式设置为不变区域性。

Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解释日期:Console.Writeline 与 string.Format 的相关文章

  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • 未解决的包含:“cocos2d.h” - Cocos2dx

    当我在 Eclipse 中导入 cocos2dx android 项目时 我的头文件上收到此警告 Unresolved inclusion cocos2d h 为什么是这样 它实际上困扰着我 该项目可以正确编译并运行 但我希望这种情况消失
  • 如何忽略“有符号和无符号整数表达式之间的比较”?

    谁能告诉我必须使用哪个标志才能使 gcc 忽略 有符号和无符号整数表达式之间的比较 警告消息 gcc Wno sign compare 但你确实应该修复它警告你的比较
  • 使闭包捕获的变量变得易失性

    闭包捕获的变量如何与不同线程交互 在下面的示例代码中 我想将totalEvents 声明为易失性的 但C 不允许这样做 是的 我知道这是错误的代码 这只是一个例子 private void WaitFor10Events volatile
  • Newtonsoft JSON PreserveReferences处理自定义等于用法

    我目前在使用 Newtonsoft Json 时遇到一些问题 我想要的很简单 将要序列化的对象与所有属性和子属性进行比较以确保相等 我现在尝试创建自己的 EqualityComparer 但它仅与父对象的属性进行比较 另外 我尝试编写自己的
  • 当 contains() 工作正常时,xpath 函数ends-with() 工作时出现问题

    我正在尝试获取具有以特定 id 结尾的属性的标签 like span 我想获取 id 以 国家 地区 结尾的跨度我尝试以下xpath span ends with id Country 但我得到以下异常 需要命名空间管理器或 XsltCon
  • .Net应用程序设置路径

    默认情况下 Windows 应用程序设置保存在该目录中 USERPROFILE Local Settings Application Data
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • 如果使用 SingleOrDefault() 并在数字列表中搜索不在列表中的数字,如何返回 null?

    使用查询正数列表时SingleOrDefault 当在列表中找不到数字时 如何返回 null 或像 1 这样的自定义值 而不是类型的默认值 在本例中为 0 你可以使用 var first theIntegers Cast
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 如何将图像路径保存到Live Tile的WP8本地文件夹

    我正在更新我的 Windows Phone 应用程序以使用新的 WP8 文件存储 API 本地文件夹 而不是 WP7 API 隔离存储文件 旧的工作方法 这是我如何成功地将图像保存到 共享 ShellContent文件夹使用隔离存储文件方法
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • Qt表格小部件,删除行的按钮

    我有一个 QTableWidget 对于所有行 我将一列的 setCellWidget 设置为按钮 我想将此按钮连接到删除该行的函数 我尝试了这段代码 它不起作用 因为如果我只是单击按钮 我不会将当前行设置为按钮的行 ui gt table
  • 如何使我的表单标题栏遵循 Windows 深色主题?

    我已经下载了Windows 10更新包括黑暗主题 文件资源管理器等都是深色主题 但是当我创建自己的 C 表单应用程序时 标题栏是亮白色的 如何使我自己的桌面应用程序遵循我在 Windows 中设置的深色主题 你需要调用DwmSetWindo
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 有没有办法禁用 .NET 标签的“双击复制”功能?

    这真的很烦人 我使用标签作为列表项用户控件的一部分 用户可以单击它来选择列表项 然后双击它来重命名它 但是 如果剪贴板中有名称 双击标签会将其替换为标签文本 我还检查了应用程序中的其他标签 双击它们也会将其复制到剪贴板 我没有在这个程序中编
  • Validation.ErrorTemplate 的 Wpf 动态资源查找

    在我的 App xaml 中 我定义了一个资源Validation ErrorTemplate 这取决于动态BorderBrush资源 我打算定义独特的BorderBrush在我拥有的每个窗口以及窗口内的不同块内
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • mysql从具有不同键的同一列进行多个连接

    我需要一些帮助来与下表进行第二次连接 我之前从这里得到了一些帮助 建议我需要添加第二个 JOIN 但是 这就是我陷入困境并需要一些帮助的地方 wp posts id Post Title 01 Event 1 02 Event 2 wp 后
  • Go:如何接收整个 UDP 数据报

    我的问题 使用 net Read 方法仅复制给定字节数组或切片大小的字节数 当然 我不想每次都分配最大 64 kB 的 UDP 数据报 有没有go如何确定数据报的大小 位于数据报头中 或再次读取直到数据报完全读取 Try 从UDP读取 ht
  • jenkins android找不到sdkmanager.jar

    我在 Mac 操作系统上运行 Jenkins 我有一个尝试执行的 ant 构建文件
  • 使用 Drupal 中的外部身份存储库验证注册数据

    当我的用户尝试注册时 我想通过检查外部身份存储库 例如调用 Web 服务或查找目录服务器 来确保他的信息有效 任何现有模块都可以实现这一点吗 如果没有 开发此功能的最佳方法是什么 我不知道现有模块允许添加自定义验证 但使用 验证 操作来实现
  • 如何在flutter中为android和iOS进行face id身份验证

    您好 我尝试寻找有关在 flutter 中使用面部 ID 进行身份验证的资源 该资源适用于 Android 和 iOS 我尝试搜索一些资源 但大多数人都说face id仅在iOS中可用 有没有任何指南或资源可供我阅读以在 Android 和
  • javascript将元素推入数组的开头[重复]

    这个问题在这里已经有答案了 我有一个对象数组 我想将一个元素推入数组的开头 我有这个 var TheArray TheObjects Array TheArray push TheNewObject 正在添加TheNewObject在最后
  • 在基于mysql中的选择的插入期间增加非自动增量字段

    我使用 select 语句将一个表中的记录插入到另一个表中 插入的表有一个新字段 该字段应在每次更新时递增 1 但不应是自动递增字段 因为每次更新每组记录的数字都需要重新开始 如果使用的 select 语句选择 42 条记录 则新表将具有一
  • AngularJS Protractor - 使用 Ng-Click 绑定查找页面上的元素

    我的页面上有一个按钮 如下所示
  • Bootstrap 3 导航丸不起作用

    我已遵循文档 但我不确定为什么我的pills不工作 HTML
  • gremlin 查询中的类型转换

    如何使用 AWS Neptune GDB 在 gremlin 控制台中将字符串值转换为整数类型 我的属性 age 带有字符串值 需要将其转换为整数类型以进行查询中的数学运算 感谢所有建议 我尝试了以下 kelvin 建议的查询 但遇到了这些
  • 如何使用 Ninject 设置可选方法拦截?

    假设我有一个类 我有时想 但现在总是 拦截一些 但不是全部 方法 据我了解 这可以通过以下方式完成 InterceptAround 在我的 Ninject 模块中 在更高级别的代码中 或者在这些方法上使用 InterceptAttribut
  • C# COM 跨线程

    我们正在开发一种软 件来控制科学测量设备 它提供了一个 COM 接口 定义了几个函数来设置测量参数并在测量数据时触发事件 为了测试我们的软件 我正在实现该设备的模拟 com 对象运行一个循环 定期触发事件 客户端应用程序中的另一个循环现在应
  • 捕获单个网络摄像头帧。在 PHP 中使用

    有没有办法从用户网络摄像头捕获单个帧并将其传递到服务器端 我尝试使用navigator getUserMedia 它允许我创建一个 LocalMediaStream 对象 我可以将其传递给视频元素 但似乎没有可以理解的方法来获取视频本身用于
  • 无效的 Web 服务调用,缺少参数值

    我已经看这个有一段时间了 看不出问题出在哪里 任何帮助是极大的赞赏 WebMethod true ScriptMethod UseHttpGet true ResponseFormat ResponseFormat Json public
  • 乘客错过了生产环境中的开发宝石

    我的生产服务器上有一个奇怪的行为 我通过 Capistrano 将 Rails 3 应用程序部署到生产服务器 Capistrano 脚本在部署结束时重新启动乘客 当我打开应用程序时 我看到一条乘客错误消息 Could not find au
  • 防止回车键触发按钮

    我有一个搜索输入框 当用户按下 Enter 时不需要执行任何操作 我正在使用 EmberJS 和 Jquery 以及以下代码 目前 它可以禁止触发弹出窗口 但由于某些原因 在 IE9 中 当按下 Enter 键时 切换按钮将成为焦点 在 C
  • 多个类的父类的部分特化

    我想对模板类使用部分专业化 以便该模板类的所有子级都将使用该专业化 让我用一个例子来解释一下 template lt typename T unsigned int rows unsigned int cols gt class BaseM
  • Heroku 应用程序上的远程 mysql 数据库

    我可以使用个人 Web 服务器上的 mysql 数据库而不是 heroku 的数据库吗 我这样配置我的生产数据库 production adapter mysql2 database somedatabase username someus
  • FastReport 5.3 Designer无法访问事件

    我在用着快速报告Delphi 10 1 Berlin 中的版本 5 3 14 我正在移植最初编写的 VCL 应用程序DelphiXE 当我打开报告时快速报表设计器单击对象检查器上的 事件 选项卡不会执行任何操作 我也无法单击报告的 代码 选
  • 解释日期:Console.Writeline 与 string.Format

    给出以下 C 代码 var dt DateTime Now Console WriteLine 0 MM dd yy 1 dt string Format 0 MM dd yy dt 当短日期 在 Windows 7 下 Control P