C#包含日期时间和特定区域性信息的对象

问题描述 投票:0回答:1

[当我尝试将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)。否则,我需要考虑采用其他方法。

c# datetime datetime-format
1个回答
0
投票

。NET中没有同时嵌入DateTime和CultureInfo的类型。但是你可以自己做:

public class DateTimeAndCultureInfo {
    public DateTime DateTime { get; set; }
    public CultureInfo CultureInfo { get;set; }
}

但是,当您从Excel库中获取日期时,这种类型可能无济于事,因为Excel并不(排他性地)依靠CultureInfo呈现其单元格。 Excel在内部使用其自己的一种数字格式字符串,如下所述:

https://support.office.com/en-us/article/available-number-formats-in-excel-0afe8f52-97db-41f1-b972-4b46e9f1e8d2

可能地,.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提供了可随意使用日期/值的各个部分,但是您必须自己编写代码以将它们粘合在一起,具体取决于用例,这可能有很多不同。

© www.soinside.com 2019 - 2024. All rights reserved.