[当我尝试将excel文件导入C#对象时,我注意到到目前为止,创建包括特定区域性信息和特定单元格的datetimeformat的dateTime类型的唯一方法是转换为字符串。
例如,可以实例化:
var date = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);
var culturedDateString = date.ToString(specifiedCulture);
但是我还没有看到可以同时包含datetime值以及Excel单元格可能包含的特定cultureInfo和datetimeformat的任何c#对象。
请让我知道c#中是否有任何等效类型可以同时包含dateTime和特定的cultureinfo(包括datetimeFormat)。否则,我需要考虑采用其他方法。
。NET中没有同时嵌入DateTime和CultureInfo的类型。但是你可以自己做:
public class DateTimeAndCultureInfo {
public DateTime DateTime { get; set; }
public CultureInfo CultureInfo { get;set; }
}
但是,当您从Excel库中获取日期时,这种类型可能无济于事,因为Excel并不(排他性地)依靠CultureInfo呈现其单元格。 Excel在内部使用其自己的一种数字格式字符串,如下所述:
可能地,.NET支持它自己的一种数字格式字符串,与Excel的数字格式字符串相似,但不兼容:
https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-numeric-format-strings
通常,您需要三个单独的信息来显示值:原始值,数字格式字符串和CultureInfo。
[CultureInfo存储基本内容,如小数点分隔符,千位分隔符,货币符号,默认的长/短日期格式以及其他特定于语言环境的内容,但从技术上讲,它不能控制该值在屏幕上的显示方式。
CultureInfo通常对您的应用程序是全局的,例如从配置或操作系统中获取,并总体上指示应用程序所使用的语言/国家。您很少希望将CultureInfo与每个DateTime实例捆绑在一起。
使用哪种数字格式字符串可能取决于用例:有时您可能希望显示短日期(例如列表中的“ 01-01-2020”),有时您可能希望显示较长的日期格式同一日期(例如“ 2020年1月1日”概述)。
[其他时候,您可能希望完全像Excel那样呈现电子表格。在这些情况下,将原始单元格值和数字格式字符串都视为单一类型是有意义的,例如f.ex:
public class Cell {
public object Value { get; set; }
public string FormatString { get;set; }
}
。NET提供了可随意使用日期/值的各个部分,但是您必须自己编写代码以将它们粘合在一起,具体取决于用例,这可能有很多不同。