DateTime.ParseExact 在日语中抛出 System.FormatException

DateTime.ParseExact throws System.FormatException in japanese

提问人:Yosif Chumpov 提问时间:6/6/2023 最后编辑:Yosif Chumpov 更新时间:6/6/2023 访问量:68

问:

我有以下抛出System.FormatException的代码。异常消息已本地化为日语,因此我怀疑这可能是由于计算机上的某些本地设置造成的。任何可能导致该问题的建议?

下面是简化代码:

 string format = "yyyy-MM-dd HH-mm-ss";

            using (var stream = new FileStream(@"...\New Text Document.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                stream.Seek(0, SeekOrigin.Begin);
                stream.SetLength(0);

                var test = new Test();
                test.AccessDateTime = DateTime.Now.ToString(format);
                
                DataContractSerializer serializer = new DataContractSerializer(typeof(Test));
                var settings = new XmlWriterSettings { Indent = true };
                using (var w = XmlWriter.Create(stream, settings))
                {
                    serializer.WriteObject(w, openFiles);
                }
            }

            DateTime d;
            using (var stream = new FileStream(@"...\New Text Document.xml", FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                XmlDictionaryReader reader = XmlDictionaryReader.CreateTextReader(stream, new XmlDictionaryReaderQuotas());
                DataContractSerializer serializer = new DataContractSerializer(typeof(Test));
                Test test = (Test)serializer.ReadObject(reader, true);

                d = DateTime.ParseExact(test.AccessDateTime, format, CultureInfo.InvariantCulture);
            }


       [DataContract(Name = "Test")]
        public class Test
        {
            [DataMember(Name = "AccessDateTime")]
            public string AccessDateTime { get; set; }
        }

迄今为止,我试图传递日本文化。ToString(..) 方法,但一切按预期工作,ParseExact 工作正常。

C# 日期时间 分析

评论

3赞 Sweeper 6/6/2023
DateTime.ToString(String)使用当前区域性(可能是日语),但在转换回 时使用的是固定区域性。你想在这里做什么?在格式化日期时,也可以使用固定区域性吗?DateTime
0赞 Ralf 6/6/2023
代码显示字符串通过 DataContractSerializer。是否可以确保从 DataContractSerializer 获取预期的格式?
0赞 Rand Random 6/6/2023
@Sweeper - 当前的文化应该无关紧要,因为格式是固定的,或者?- dotnetfiddle.net/5W7Dqw
0赞 Rand Random 6/6/2023
如我的 dotnetfiddle(上一条评论)所示,您的代码不会导致您声称的错误
0赞 Yosif Chumpov 6/6/2023
在格式化日期时,也可以使用固定区域性。这里的想法是将日期时间存储到外部文件中,以便应用程序以后可以读取该日期。奇怪的是,我将日本文化(带有各种数据/时间分隔符)传递给了数据时间。ToString 方法,但不会引发异常。

答: 暂无答案