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
CODE PROJECT For Those Who Code
  • Home
  • Articles
  • FAQ
Community
  1. Home
  2. General Programming
  3. Visual Basic
  4. CtypeDynamic : How can i detect if an expression can be converted to a specific Date format

CtypeDynamic : How can i detect if an expression can be converted to a specific Date format

Scheduled Pinned Locked Moved Visual Basic
questioncsharp
13 Posts 2 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.
  • D desanti

    I have it as a string , But if I use CTypeDynamic(str, type1) , and str="11/26/2018" , it shows as correct , but it shouldn't be because is not correct with the format dd/MM/yyyy

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

    The correct date-format is determined by the system settings, and thus, by the user. You choose a date where it is easy to see which is the day-part and which is the month-part. Now, how about 3/4/2001? The computer isn't allowed to guess, and you can't guess the "correct" place of day's and month within that date.

    Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

    D 1 Reply Last reply
    0
    • L Lost User

      The correct date-format is determined by the system settings, and thus, by the user. You choose a date where it is easy to see which is the day-part and which is the month-part. Now, how about 3/4/2001? The computer isn't allowed to guess, and you can't guess the "correct" place of day's and month within that date.

      Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

      D Offline
      D Offline
      desanti
      wrote on last edited by
      #5

      I want that my program works regardless of how user configure the system date format. So I choose the format dd/MM/yyyy , and the user should input the date in this format. 3/4/2001 should be interpreted as April 3 2001. 26/11/2018 is November 26 11/26/2018 - is invalid

      L 1 Reply Last reply
      0
      • D desanti

        I want that my program works regardless of how user configure the system date format. So I choose the format dd/MM/yyyy , and the user should input the date in this format. 3/4/2001 should be interpreted as April 3 2001. 26/11/2018 is November 26 11/26/2018 - is invalid

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

        desanti wrote:

        3/4/2001 should be interpreted as April 3 2001. 26/11/2018 is November 26 11/26/2018 - is invalid

        So, any date that can be interpreted as M/D/Y should be. Anything that fails is to be assumed D/M/Y, and if that fails, it is invalid. No, I will not participate. Your data is all in the same format, or the entire dataset must be considered invalid. There's a good reason why DateTime.TryParse Method (System) | Microsoft Docs[^] only accepts a single provider. If you don't know what the format is, and start guessing like you do, you're bound to end up with multiple small disasters.

        Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

        D 1 Reply Last reply
        0
        • L Lost User

          desanti wrote:

          3/4/2001 should be interpreted as April 3 2001. 26/11/2018 is November 26 11/26/2018 - is invalid

          So, any date that can be interpreted as M/D/Y should be. Anything that fails is to be assumed D/M/Y, and if that fails, it is invalid. No, I will not participate. Your data is all in the same format, or the entire dataset must be considered invalid. There's a good reason why DateTime.TryParse Method (System) | Microsoft Docs[^] only accepts a single provider. If you don't know what the format is, and start guessing like you do, you're bound to end up with multiple small disasters.

          Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

          D Offline
          D Offline
          desanti
          wrote on last edited by
          #7

          Maybe we are misunderstanding each other. The situation is simple : The user write a date in a textbox. I want that the user write the date in the format : day/month/year. So I want a way to check if what the user has wrote can be converted to a date in that format : - 01/05/2015 - is ok because 01 is a valid for day number , 05 is ok because is valid for month number , 2015 is ok because is valid for year number. - 25/12/2018 - is ok because 25 is a valid for day number , 12 is ok because is valid for month number , 2018 is ok because is valid for year number. - 12/25/2018 - is wrong because 12 is a valid for day number , 25 is wrong because is not valid for month number , 2018 is ok because is valid for year number. So it's wrong !!! What is the problem with this logic ?????

          L 2 Replies Last reply
          0
          • D desanti

            Maybe we are misunderstanding each other. The situation is simple : The user write a date in a textbox. I want that the user write the date in the format : day/month/year. So I want a way to check if what the user has wrote can be converted to a date in that format : - 01/05/2015 - is ok because 01 is a valid for day number , 05 is ok because is valid for month number , 2015 is ok because is valid for year number. - 25/12/2018 - is ok because 25 is a valid for day number , 12 is ok because is valid for month number , 2018 is ok because is valid for year number. - 12/25/2018 - is wrong because 12 is a valid for day number , 25 is wrong because is not valid for month number , 2018 is ok because is valid for year number. So it's wrong !!! What is the problem with this logic ?????

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

            Why make things difficult for yourself and your user? Use a Calendar Class (System.Windows.Controls) | Microsoft Docs[^]

            D 1 Reply Last reply
            0
            • L Lost User

              Why make things difficult for yourself and your user? Use a Calendar Class (System.Windows.Controls) | Microsoft Docs[^]

              D Offline
              D Offline
              desanti
              wrote on last edited by
              #9

              Ok , what about the case when i'm reading the strings from a text File ?

              L 1 Reply Last reply
              0
              • D desanti

                Maybe we are misunderstanding each other. The situation is simple : The user write a date in a textbox. I want that the user write the date in the format : day/month/year. So I want a way to check if what the user has wrote can be converted to a date in that format : - 01/05/2015 - is ok because 01 is a valid for day number , 05 is ok because is valid for month number , 2015 is ok because is valid for year number. - 25/12/2018 - is ok because 25 is a valid for day number , 12 is ok because is valid for month number , 2018 is ok because is valid for year number. - 12/25/2018 - is wrong because 12 is a valid for day number , 25 is wrong because is not valid for month number , 2018 is ok because is valid for year number. So it's wrong !!! What is the problem with this logic ?????

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #10
                Dim source As String() = {"01/05/2015", "25/12/2018", "12/25/2018"}
                
                Sub Main()
                
                    For Each dateCandidate As String In source
                        Dim dateResult As Date
                        If Date.TryParseExact(
                            dateCandidate, "d/M/yyyy",
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.None,
                            dateResult) Then
                            Console.WriteLine("Found {0} as valid.", dateResult)
                        Else
                            Console.WriteLine("Found {0} to be invalid.", dateCandidate)
                        End If
                    Next
                    Console.ReadKey()
                End Sub
                

                Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

                D 1 Reply Last reply
                0
                • D desanti

                  Ok , what about the case when i'm reading the strings from a text File ?

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

                  Then you do what Eddy already suggested and use DateTime.TryParse Method (System) | Microsoft Docs[^]. Try and make more use of Google and the MSDN documentation.

                  1 Reply Last reply
                  0
                  • L Lost User
                    Dim source As String() = {"01/05/2015", "25/12/2018", "12/25/2018"}
                    
                    Sub Main()
                    
                        For Each dateCandidate As String In source
                            Dim dateResult As Date
                            If Date.TryParseExact(
                                dateCandidate, "d/M/yyyy",
                                CultureInfo.InvariantCulture,
                                DateTimeStyles.None,
                                dateResult) Then
                                Console.WriteLine("Found {0} as valid.", dateResult)
                            Else
                                Console.WriteLine("Found {0} to be invalid.", dateCandidate)
                            End If
                        Next
                        Console.ReadKey()
                    End Sub
                    

                    Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

                    D Offline
                    D Offline
                    desanti
                    wrote on last edited by
                    #12

                    Thank you , Your code works with these examples and many others. but as I've said , I read values from a text file . Sometimes the string that come from text file is like this : 25/12/2018 00:01:00 This is correct because the date part is correct , but for your code this is invalid.

                    L 1 Reply Last reply
                    0
                    • D desanti

                      Thank you , Your code works with these examples and many others. but as I've said , I read values from a text file . Sometimes the string that come from text file is like this : 25/12/2018 00:01:00 This is correct because the date part is correct , but for your code this is invalid.

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

                      desanti wrote:

                      This is correct because the date part is correct , but for your code this is invalid.

                      I wrote it that way; if you want different behaviour, look the method up on MSDN.

                      Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] "If you just follow the bacon Eddy, wherever it leads you, then you won't have to think about politics." -- Some Bell.

                      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