C# Объект, содержащий дату и время c cultureinfo для полной совместимости с ячейкой даты и времени Excel - PullRequest
0 голосов
/ 02 мая 2020

Когда я пытаюсь импортировать файл Excel в C# объект, я замечаю, что пока единственный способ создать тип dateTime, включающий в себя заданную c cultureinfo и формат datetime для указанной ячейки c, преобразуется в string.

Например, его можно создать:

var date = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);
var culturedDateString = date.ToString(specifiedCulture);

Но я не видел ни одного c# объекта, который мог бы содержать как значение даты-времени, так и специфицируемый c cultureInfo и datetimeformat, который может содержать ячейка Excel.

Пожалуйста, дайте мне знать, если в c# есть какой-либо эквивалентный тип, который может содержать как dateTime, так и спецификацию c cultureinfo, включая datetimeFormat. В противном случае мне нужно подумать о разных подходах.

1 Ответ

0 голосов
/ 06 мая 2020

Тип ввода отсутствует. 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 хранит базовые данные c, такие как десятичный разделитель, разделитель тысяч, символ валюты, форматы длинной / короткой даты по умолчанию и другие определяемые языком c данные, но технически не контролирует, как значение отображается на экране.

CultureInfo обычно является глобальным для вашего приложения, например, взятым из конфигурации или ОС, и указывает в целом, на каком языке / стране работает приложение. Лишь в редких случаях вы захотите связать CultureInfo с каждым экземпляром DateTime.

Какую строку формата чисел использовать может зависеть от варианта использования: иногда вам может понадобиться отобразить короткую дату (например, «01-01-2020» в списке), иногда вам может понадобиться отобразить более длинную версию с той же датой (например, «1»). январь 2020 "в обзоре).

В других случаях может потребоваться визуализировать электронную таблицу точно так же, как в Excel. В этих случаях имеет смысл рассматривать как необработанное значение ячейки, так и строку числового формата как один тип, f.ex:

public class Cell {
    public object Value { get; set; }
    public string FormatString { get;set; }
}

. NET предоставляет отдельные части для работы с датами / значениями, как вы хотите, но вы должны написать код самостоятельно, чтобы склеить его все вместе в зависимости от варианта использования, которые могут сильно варьироваться.

...