Coś mi się wydaje że w ogóle nie łapiesz tego co tam masz.
godziny =( strftime( buffer, 80, "%H", timeinfo ) );
//ta funkcja zwraca liczbę przekopiowanych znaków do buffer(np 1)
//do godziny zapisze się ostatni bajt, czyli 1
puts( buffer );
//nie wiem co to robi...
godziny2 = godziny.substr();
//kopiujesz to co jest w godziny do godziny2
//po co w ogóle funkcja substr();
//po co w ogóle to kopiujesz( no... chyba że gdzieś później potrzebujesz)
godziny3 = static_cast < std::string >( godziny2 );
//kopiujesz to co jest w godziny do godziny2
//po co w ogóle rzutowanie
//po co w ogóle to kopiujesz( no... chyba że gdzieś później potrzebujesz)
w skrócie można te 2 ostatnie linie zapisać godziny3 = godziny2 = godziny;
o ile w ogóle to potrzebne...
później wypisujesz to co jest w godziny3 czyli znak np.0x01 co w kodowaniu konsoli jest białą minką lub znak 0x02 (czarna minka) o ile się nie myle.
Uno buffer zawiera jak się domyślam godziny w "char*" i to z niego trzeba skopiować.
Duo zobacz na tą funkcję na google. Możesz ją efektywniej wykorzystać (np od razu do bufora ładować hh:mm:ss po dwukropku lub jakkolwiek inaczej.
Po trzecie jak chcesz w prosty sposób posługiwać się czasem możesz też skorzystać z:
SYSTEMTIME czas;
GetLocalTime( & czas );
cout << czas.wHour << ':' << czas.wMinute << ':' << czas.wSecond;
Jak będziesz chciał mieć te liczby w string'u to użyj to_string(...); (poczytaj na google na ten temat)
Jak będziesz chciał jeszcze inne rzeczy typu dzień tygodnia, dzień, miesiąc, rok... to zajrzyj jakie składniki ma ta struktura :)