Как получить формат Отдаленного срока от DateTime без рабочего дня

Я не квалифицирован для комментария входа для .NET, так как мой хлеб с маслом является Java, но у нас была миграция в нашем входе за прошлые 8 лет, можно найти полезную аналогию с вопросом.

Мы запустили с регистратора Singleton, который использовался каждым потоком в JVM и установил регистрирующийся уровень для всего процесса. Это привело к огромным журналам, если мы должны были отладить даже очень определенную часть системы, таким образом, урок номер один должен сегментировать Ваш вход.

Наше текущее воплощение регистратора позволяет несколько экземпляров с одним определенным как значение по умолчанию. Мы можем инстанцировать любого количества дочерних регистраторов, которые имеют различные уровни входа, но самый полезный фасет этой архитектуры является способностью создать регистраторы для отдельных пакетов и классов путем простого изменения регистрирующихся свойств. Урок номер два должен создать гибкую систему, которая позволяет переопределять ее поведение, не изменяя код.

Мы пользуемся библиотекой входа свободного городского населения Apache перенесенный Log4J.

Hope это помогает!

* Редактирование *

После того, чтобы читать сообщение Jeffrey Hantin ниже, я понял, что должен был отметить то, чем на самом деле стала наша внутренняя обертка входа. Это - теперь по существу фабрика и строго используется для получения рабочего регистратора с помощью корректного файла свойств (который по причинам прежней версии не был перемещен в положение по умолчанию). Так как можно указать регистрирующийся конфигурационный файл на командной строке теперь, я подозреваю, что это станет еще более минимизированным и если бы Вы запускаете новое приложение, я определенно согласился бы с его оператором, что Вы не должны даже потрудиться переносить регистратор.

17
задан Adam Tegen 8 September 2009 в 18:28
поделиться

4 ответа

Похоже, это помогло.

  1. Перечислить все допустимые шаблоны даты и времени: CultureInfo.DateTimeFormat.GetAllDateTimePatterns
  2. Выбрать самый длинный шаблон (предположительно, это лучшее совпадение), который:
    • Подстрока CultureInfo.DateTimeFormat.LongDatePattern
    • Не содержит «ddd» (короткое название дня)
    • Не содержит «dddd» (длинное название дня)

Это, кажется, строки, которые я искал.

См. код ниже:

class DateTest
{
    static private string GetDatePatternWithoutWeekday(CultureInfo cultureInfo)
    {
        string[] patterns = cultureInfo e.DateTimeFormat.GetAllDateTimePatterns();

        string longPattern = cultureInfo.DateTimeFormat.LongDatePattern;

        string acceptablePattern = String.Empty;

        foreach (string pattern in patterns)
        {
            if (longPattern.Contains(pattern) && !pattern.Contains("ddd") && !pattern.Contains("dddd"))
            {
                if (pattern.Length > acceptablePattern.Length)
                {
                    acceptablePattern = pattern;
                }
            }
        }

        if (String.IsNullOrEmpty(acceptablePattern))
        {
            return longPattern;
        }
        return acceptablePattern;
    }

    static private void Test(string locale)
    {
        DateTime dateTime = new DateTime(2009, 12, 5);

        Thread.CurrentThread.CurrentCulture  = new CultureInfo(locale);

        string format = GetDatePatternWithoutWeekday(Thread.CurrentThread.CurrentCulture);

        string result = dateTime.ToString(format);

        MessageBox.Show(result);            
    }
}

Технически это, вероятно, не сработало бы, если бы в длинном формате имя дня было зажато посередине. Для этого я должен выбрать шаблон с самой длинной общей подстрокой вместо самого длинного точного совпадения.

8
ответ дан 30 November 2019 в 13:34
поделиться

Попробуйте:

DateTime time = ....
string formmattedDate = time.Day.ToString() + " " + time.ToString("MMMM");
-1
ответ дан 30 November 2019 в 13:34
поделиться

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

Боюсь, что вам нужно будет создать массив из 7 строк (по одной на каждый день) в местной культуре и удалить эти строки из выходных данных формата LongDate. Затем убедитесь, что вы удалили все повторяющиеся / и пробелы.

Надеюсь, есть способ получше, но я его не вижу.

2
ответ дан 30 November 2019 в 13:34
поделиться

Очень ужасный, ужасный способ добиться этого - удалить спецификаторы формата, которые вам не нужны, из существующего LongDatePattern:

public static string CorrectedLongDatePattern(CultureInfo cultureInfo)
{
    var info = cultureInfo.DateTimeFormat;

    // This is bad, mmmkay?
    return Regex.Replace(info.LongDatePattern, "dddd,?",String.Empty).Trim();
}
3
ответ дан 30 November 2019 в 13:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: