Свойство DateTime в элементе ConfigurationElement

Я хочу поместить DateTime в файл конфигурации, однако я хочу, чтобы DateTime выражался особым образом. Я видел примеры использования DateTime в ConfigurationElement (как пример ниже). Все примеры, которые я видел, имеют дату, выраженную в американском формате. Я хочу, чтобы эта дата была понятна всем, независимо от того, кто они, поэтому я хочу использовать yyyy-MM-dd HH:mm:ss как формат.

Как это сделать при использовании класса, производного от ConfigurationElement?

    class MyConfigElement : ConfigurationElement
    {
        [ConfigurationProperty("Time", IsRequired=true)]
        public DateTime Time
        {
            get
            {
                return (DateTime)this["Time"];
            }
            set
            {
                this["Time"] = value;
            }
        }
    }

3 ответа

Решение

Уверены ли вы? Afaik, по умолчанию используется стиль XML, и это то, что вы тоже хотите (гггг-мм-дд).

Я думаю, вы можете использовать следующее:

[ConfigurationProperty("Time", IsRequired=true)]
public DateTime Time
{
    get
    {
        return DateTime.ParseExact(
            this["Time"].ToString(),
            "yyyy-MM-dd HH:mm:ss",
            CultureInfo.InvariantCulture);
    }
    set
    {
        this["Time"] = value.ToString("yyyy-MM-dd HH:mm:ss");
    }
}

У меня есть похожая проблема, используя вышеуказанное решение. Для меня строка "this["Time"].ToString()" похожа на "2015/6/12 15:31:24", в то время как параметр формата метода DateTime.ParseExact равен "гггг-ММ-дд ЧЧ: мм: сс". Таким образом, этот метод не может проанализировать строку с заданным форматом. Кроме того, вы можете сделать, как показано ниже

if(this["Time"] is string)
{
    return DateTime.ParseExact(
        this["Time"].ToString(),
        "yyyy-MM-dd HH:mm:ss",
        CultureInfo.InvariantCulture);
}
else
{
    DateTime time = (DateTime)this["Time"];
    return DateTime.ParseExact(
        time.ToString("yyyy-MM-dd HH:mm:ss"),
        "yyyy-MM-dd HH:mm:ss",
        CultureInfo.InvariantCulture);
}
Другие вопросы по тегам