Hi

I have a an object which contains a ptime and an int mask. The mask tells me that regardless of the value stored inside the ptime object, I should display the ptime as such.

If you look at the code below (set_fmt function), I set the format of a date_facet object according to some bitmasks. 

I now want to use this date_facet together with my ptime to output the ptime value to an outputstream?
I don't want it to change the outputstream's settings for ALL ptime values, just for this single instance

All the examples use a date_facet allocated on the heap, and use std::cout.imbue(...), whereas I'm looking for functionality similar to strftime... is this possible?

eg:

class expiration
{
    enum expiry_mask
    {
        expiry_null   = 0x00,
        expiry_year   = 0x01,
        expiry_month  = 0x02,
        expiry_day    = 0x04,
        expiry_hour   = 0x08,
        expiry_minute = 0x10,
        expiry_second = 0x20,
        expiry_date   = 0x07, // yyyy/mm/dd
        expiry_time   = 0x38, // hh:nn:ss
        expiry_all    = 0x3f  // yyyy/mm/dd hh:nn:ss
    };

boost::posix_time::ptime desig;
int32_t desig_mask;
boost::gregorian::date_facet fmt;

public:
void expiration::set_fmt(const int32_t mask)
{
    switch(mask & expiry_date) // strip off time part of mask
    {
        case expiry_null:
            fmt.format("");
            break;
        case expiry_year | expiry_month | expiry_day: // display as "dd Mmm yy"
            fmt.format("%d %b %y");
            break;
        case expiry_year | expiry_month: // display as "Mmm yy"
            fmt.format("%b %y");
            break;
        case expiry_year: // display as "yy"
            fmt.format("%y");
            break;
        default:
            break;
    }
}

... some other stuff here ...

};

Thanks
Steve