Как отобразить DateTime с сокращенным Часовым поясом?

Я не могу выяснить ошибку в коде, может кто-нибудь, пожалуйста, взгляните на нее и помогите мне понять, что я здесь делаю неправильно.

Проблема в том, что вы инициализируете статический элемент cnt следующим образом

template <size_t N>
size_t RLE<N>::cnt = 1 + RLE<N - 1>::cnt;

size_t RLE<0>::cnt = 0;

, поэтому вы получаете cnt == N, когда компилятор использует инициализированное значение RLE<N - 1>::cnt (случай g ++ ), cnt == 1 когда N > 0, когда компилятор использует ноль для RLE<N - 1>::cnt (случай clang ++).

Я не знаю, кто прав, но дело в том, что когда вы пишете

        cout << cnt << *p;
        cnt = 0;

, вы печатаете cnt в RLE<N> - так N или 1, в зависимости от случая - и вы обнулите cnt в RLE<N>.

Но когда вы обнуляете cnt в RLE<N>, cnt в RLE<N-1> остаются неизменными (так N-1 или 1, в зависимости от случая).

Я не вижу большого количества метапрограммирования в вашем коде, но мне кажется, что возможное исправление установлено для всех cnt равным 1

template <size_t N>
size_t RLE<N>::cnt = 1;

size_t RLE<0>::cnt = 1;

и для RNE<N-1>::cnt установлено значение cnt + 1 в Compress() ]

static void Compress(char const p[])
{                
    if (!(*p == *(p + 1)))
    {
        cout << cnt << *p;
        cnt = 0u;
    }

    RLE<N - 1>::cnt = cnt+1u;  <---  add this line

    RLE<N - 1>::Compress(p + 1);
}

Но, честно говоря, я предпочитаю ваш оригинальный (не метапрограммирующий) код.

38
задан Sean Hanley 7 October 2008 в 20:53
поделиться

1 ответ

Вот мой метод быстрого взлома, который я только что сделал, чтобы обойти это.

public static String TimeZoneName(DateTime dt)
{
    String sName = TimeZone.CurrentTimeZone.IsDaylightSavingTime(dt) 
        ? TimeZone.CurrentTimeZone.DaylightName 
        : TimeZone.CurrentTimeZone.StandardName;

    String sNewName = "";
    String[] sSplit = sName.Split(new char[]{' '});
    foreach (String s in sSplit)
        if (s.Length >= 1)
            sNewName += s.Substring(0, 1);

    return sNewName;
}
20
ответ дан 27 November 2019 в 03:54
поделиться
Другие вопросы по тегам:

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