Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. ParseExact - parsing a date with a given format in C++ / MFC

ParseExact - parsing a date with a given format in C++ / MFC

Scheduled Pinned Locked Moved C / C++ / MFC
c++csharpjsonhelpquestion
14 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • B BadJerry

    Hello, I need a function that would do a parse exact on a CString - given a format - and return a date (or an exception!) Eg COleDateTime timParsed; timParsed.ParseExact("2002 10 3","yyyy mm d"); I am aware of ParseDateTime... but I need something where you actually specify the expected format! And I knoe ParseExact is in .net but hey I am stuck in the nineties! Any idea? Thanks! Jerry

    S Offline
    S Offline
    Software_Developer
    wrote on last edited by
    #5

    Richard pointed out using strftime( ) . it is standard C.

    #include
    #include

    int main ()
    {
    time_t rawtime;
    struct tm * timeinfo;
    char buffer [80];

    time ( &rawtime );
    timeinfo = localtime ( &rawtime );

    strftime (buffer,80,"%Y %m %d ",timeinfo);

    puts (buffer);

    return 0;
    }

    B 1 Reply Last reply
    0
    • S Software_Developer

      Richard pointed out using strftime( ) . it is standard C.

      #include
      #include

      int main ()
      {
      time_t rawtime;
      struct tm * timeinfo;
      char buffer [80];

      time ( &rawtime );
      timeinfo = localtime ( &rawtime );

      strftime (buffer,80,"%Y %m %d ",timeinfo);

      puts (buffer);

      return 0;
      }

      B Offline
      B Offline
      BadJerry
      wrote on last edited by
      #6

      Yes but I want to parse not to format! Thanks! Jerry

      L S 2 Replies Last reply
      0
      • B BadJerry

        Yes but I want to parse not to format! Thanks! Jerry

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #7

        My apologies, I got mixed up, and cannot for the life of me recall the function that does the parsing. [edit] It's strptime() which, unfortunately, is not available in Windows, so you will need to get a copy of an open source version from somewhere. [/edit]

        One of these days I'm going to think of a really clever signature.

        J 1 Reply Last reply
        0
        • B BadJerry

          Hello, I need a function that would do a parse exact on a CString - given a format - and return a date (or an exception!) Eg COleDateTime timParsed; timParsed.ParseExact("2002 10 3","yyyy mm d"); I am aware of ParseDateTime... but I need something where you actually specify the expected format! And I knoe ParseExact is in .net but hey I am stuck in the nineties! Any idea? Thanks! Jerry

          K Offline
          K Offline
          krmed
          wrote on last edited by
          #8

          You can still use the ParseDateTime, but you need to set the format first. Here's what I've done... First, get the current format using

          GetLocaleInfo(m\_LCID, LOCALE\_SSHORTDATE, m\_csOriginalSDateFormat.GetBuffer(MAX\_PATH + 1), MAX\_PATH);
          m\_csOriginalSDateFormat.ReleaseBuffer();
          

          (m_csOriginalSDateFormat is a CString) Next have your own CString with the desired format:

          m_csNewSDateFormat = _T("M/d/yyyy");

          Now, set the desired format, parse the date/time, and restore the original format:

          SetLocaleInfo(m_LCID, LOCALE_SSHORTDATE, m_csNewSDateFormat);
          oleStartTime.ParseDateTime(csDateTime);
          SetLocaleInfo(m_LCID, LOCALE_SSHORTDATE, m_csOriginalSDateFormat);

          Hope this helps.

          Karl - WK5M PP-ASEL-IA (N43CS) PGP Key: 0xDB02E193 PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193

          B 1 Reply Last reply
          0
          • B BadJerry

            Yes but I want to parse not to format! Thanks! Jerry

            S Offline
            S Offline
            Software_Developer
            wrote on last edited by
            #9

            My mistake. Didn't notice that CStrings only compile in MFC.

            char buffer[256];
            CString cs = buffer;

            CString Management[^]

            1 Reply Last reply
            0
            • K krmed

              You can still use the ParseDateTime, but you need to set the format first. Here's what I've done... First, get the current format using

              GetLocaleInfo(m\_LCID, LOCALE\_SSHORTDATE, m\_csOriginalSDateFormat.GetBuffer(MAX\_PATH + 1), MAX\_PATH);
              m\_csOriginalSDateFormat.ReleaseBuffer();
              

              (m_csOriginalSDateFormat is a CString) Next have your own CString with the desired format:

              m_csNewSDateFormat = _T("M/d/yyyy");

              Now, set the desired format, parse the date/time, and restore the original format:

              SetLocaleInfo(m_LCID, LOCALE_SSHORTDATE, m_csNewSDateFormat);
              oleStartTime.ParseDateTime(csDateTime);
              SetLocaleInfo(m_LCID, LOCALE_SSHORTDATE, m_csOriginalSDateFormat);

              Hope this helps.

              Karl - WK5M PP-ASEL-IA (N43CS) PGP Key: 0xDB02E193 PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193

              B Offline
              B Offline
              BadJerry
              wrote on last edited by
              #10

              That's clever!

              1 Reply Last reply
              0
              • B BadJerry

                Hello, I need a function that would do a parse exact on a CString - given a format - and return a date (or an exception!) Eg COleDateTime timParsed; timParsed.ParseExact("2002 10 3","yyyy mm d"); I am aware of ParseDateTime... but I need something where you actually specify the expected format! And I knoe ParseExact is in .net but hey I am stuck in the nineties! Any idea? Thanks! Jerry

                S Offline
                S Offline
                Software_Developer
                wrote on last edited by
                #11

                *FACEPALM* COleDateTime::Format MSDN[^]

                COleDateTime t(1999, 3, 19, 22, 15, 0);

                CString str = t.Format(_T("%A, %B %d, %Y"));

                B 1 Reply Last reply
                0
                • S Software_Developer

                  *FACEPALM* COleDateTime::Format MSDN[^]

                  COleDateTime t(1999, 3, 19, 22, 15, 0);

                  CString str = t.Format(_T("%A, %B %d, %Y"));

                  B Offline
                  B Offline
                  BadJerry
                  wrote on last edited by
                  #12

                  Thanks again... but this is to return a string with a format... What I wanted is to parse a string into a date with a format! Something like

                  COleDatetime t;
                  t.IsThisStringADateWithThisFormat(_T("10012012"),"ddMMyyyy");

                  But I have managed (see my post above)! Thanks anyway! Jerry

                  1 Reply Last reply
                  0
                  • L Lost User

                    My apologies, I got mixed up, and cannot for the life of me recall the function that does the parsing. [edit] It's strptime() which, unfortunately, is not available in Windows, so you will need to get a copy of an open source version from somewhere. [/edit]

                    One of these days I'm going to think of a really clever signature.

                    J Offline
                    J Offline
                    jschell
                    wrote on last edited by
                    #13

                    Richard MacCutchan wrote:

                    It's strptime() which, unfortunately, is not available in Windows

                    Very odd. Far as I can tell strptime is not part of ANSI C. Which makes me wonder why.

                    L 1 Reply Last reply
                    0
                    • J jschell

                      Richard MacCutchan wrote:

                      It's strptime() which, unfortunately, is not available in Windows

                      Very odd. Far as I can tell strptime is not part of ANSI C. Which makes me wonder why.

                      L Offline
                      L Offline
                      Lost User
                      wrote on last edited by
                      #14

                      It's POSIX according to the man page[^].

                      One of these days I'm going to think of a really clever signature.

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups