スマートかは知らないけど、時刻とかならlocaltime()を使う
方法もありますよ。

あと、*bはメモリを自分で確保してるわけではないので、
開放は必要ないかと。