Czy w bibliotece daty i godziny Boost jest funkcja narzędziowa do konwersji krótkich ciągów miesiąca (np. Jan, Luty, Mar, Kwiecień) na typ boost::gregorian::greg_month? Dokumentacja biblioteki nie jest świetna i nie widzę niczego w nagłówkach.

0
Graeme 24 luty 2012, 17:44

2 odpowiedzi

Najlepsza odpowiedź

Hacky obejść mogą być:

#include <iostream>
#include <boost/date_time/gregorian/gregorian.hpp>

int main(void)
{
  auto ptr = boost::gregorian::greg_month::get_month_map_ptr();

  if (ptr)
  {
    auto it = ptr->begin();
    for(; it != ptr->end(); ++it)
    {
      std::cout << it->first << " " << it->second << '\n';
    }
  }
}

Ta mapa zawiera mapowanie między wszystkimi krótkimi/długimi nazwami i krótkimi niezbędnymi do utworzenia instancji greg_month. Wystarczy stworzyć wokół niego małe opakowanie...

Zgodnie z odkryciem Graeme'a istnieje funkcja wygody, która już to obejmuje boost::date_time::month_str_to_ushort<>

1
Nim 24 luty 2012, 18:48

Tak, istnieją przedziały czasu dat wzmocnienia, których można używać do tworzenia ustawień regionalnych i umieszczania ich w strumieniach.

Uważaj jednak, że jeśli zamierzasz wydrukować lub przeanalizować dużą liczbę dat i godzin, nie tworzysz aspektu i lokalizacji dla każdego z nich, które analizujesz.

Poszukaj tutaj dokumentacji dotyczącej wprowadzanie dat. Niektóre z ich przykładów używają krótkich nazw miesięcy, które wydają się mieć %b jako jego specyfikator formatu

0
CashCow 24 luty 2012, 18:05