Validate the date is in correct format - vb.net

I have one field which is in text format and is used for keeping release date .I have to check whether the date in field is in dd/mm/yyyy format or not.
Please suggest how to do that if the field is in string format.

I would use DateTime.TryParseExact, it will not throw an exeption but will return a bool that represents a valid conversion.
From above link:
Converts the specified string representation of a date and time to its DateTime equivalent using the specified format, culture-specific format information, and style. The format of the string representation must match the specified format exactly. The method returns a value that indicates whether the conversion succeeded.
Example:
Dim yourdate As String = "31/12/1999"
Dim mynewDate As DateTime
Dim culture As New CultureInfo("") 'Uses invariant culture
If Not Date.TryParseExact(yourdate, "dd/MM/yyyy", culture, DateTimeStyles.None, mynewDate) Then
MsgBox("Oops")
Else
MsgBox(mynewDate.ToString())
End If

DateTime.ParseExact
trycatch the call since it will throw an exception if it not in the specified format.
format = "d"
dateString = "Sun 15 Jun 2008 8:30 AM -06"
Try
result = Date.ParseExact(dateString, format, provider)
Console.WriteLine("{0} converts to {1}.", dateString, result.ToString())
Catch e As FormatException
Console.WriteLine("{0} is not in the correct format.", dateString)
End Try

Related

Convert string format to date format

How can I convert this string format
03.07.2019
to the following Date Format?
2019-07-03
This is how the String format I get from Soap Services looks like
Public Class ContractBill
Public StartDate As Date
End Class
Dim ctrBill As New ContractBill With {
.StartDate = Convert.ToDateTime(BillingData.START_DATE.ToString("yyyy-MM-dd"))
}
this is my attempt to convert the code to the desired format, but with this .StartDate I get the error:
System.InvalidCastException: "The object of type" System.String "cannot be converted to type" System.IFormatProvider "."
How can I get this Date format yyyy-MM-dd?
There is no format for date with ., so you have to first replace the . with - or / so you can parse your date into available formats.
string date = "03.07.2019";
DateTime value = Convert.ToDateTime(date.Replace(".", "-"));
VB.net
Dim date As String = "03.07.2019"
Dim value As DateTime = Convert.ToDateTime(date.Replace(".", "-"))
Use the DateTime.TryParseExact method since you know the format of the incoming date:
Dim enUS As New CultureInfo("en-US")
Dim inbound As String = "03.07.2019"
Dim outbound As DateTime
If DateTime.TryParseExact(inbound, "MM.dd.yyyy", enUS, DateTimeStyles.None, outbound) Then
Console.WriteLine("'{0}' is formated from: {1}", outbound.ToString("yyyy/dd/MM"), inbound)
Else
Console.WriteLine("'{0}' is not in an acceptable format.", inbound)
End If
Fiddle: Live Demo

Conversion from string "M" to type 'Integer' is not valid

I am having an issues with conversion of values that I am trying to reference via a field that I want to format from an ERP System. I am unable to convert all of my values because they are being pulled out as strings, no matter if variables are set to integer or string. What am I doing that would cause this error, should variables be defined a different way?
Public Class Class1
Inherits erp.Rule
Public Overrides Function Execute() As erp.RuleResult
Dim Result As New RuleResult
Try
Dim date_recieved As Date
Dim month As String
Dim period As String
Dim Year1 As String
Dim Year As String
date_recieved = Data.Fields.GetFieldByAlias("date_received").FieldValue
month = Format(date_recieved, "M").ToString
Year = Data.Fields.GetFieldByAlias("yearAR").FieldValue
period = Data.Fields.GetFieldByAlias("periodAR").FieldValue
If period = month Then
If Year = Year1 Then
Exit Function
Else
MessageBox.Show("Date received does not match year", "Invalid Input")
End If
Else
MessageBox.Show("Date received does not match period", "Invalid Input")
End If
Catch ex As Exception
Result.Message = ex.Message
End Try
Result.Success = True
Return Result
End Function
Format does not accept a string parameter, by you passing "M" it is trying to convert the datatype you supply to the datatype the function accepts and since a string does not implicitly cast to an integer an error occurs
To format a Date type to various formats of string you just use your date variable and its subsequent .ToString() method with your formatting rules as an argument of .ToString()
Here is a link to the msdn explaining all the possible formatting options: https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Error converting string to Custom Date Format

In my application I got error when trying to convert a Date from string date format as shown below:
dateFormat = Format(CDate("2014-mar-06"), "MM/dd/yyyy")
Error
Conversion from string "2014-mar-06" to type 'Date' is not valid
This problem only comes when my Region and Language setting is Spanish(Mexico) (or any spanish but not for others) in Windows 7 . What is the problem and how to solve this?
Avoid VB6 functions like CType and use .NET methods like TryParse instead.
Also CultureInfo.InvariantCulture gets the CultureInfo object that is culture-independent (invariant)
Try this
Dim dateString = "2014-mar-06"
Dim dateValue As DateTime
If DateTime.TryParseExact(dateString, _
"yyyy-MMM-dd", CultureInfo.InvariantCulture, _
DateTimeStyles.None, dateValue) Then
Dim myDate = dateValue.ToString("MM/dd/yyyy") 'Your Date is stored in myDate
Else
'Unable to parse your dateString
End If

Date format in Windows CE

I'm trying to convert the date string to "dd/MM/yyyy" format using the code below
m_dEDate = Format(CDate(strExpiry), "dd/MM/yyyy")
But system got the exception error - "parameter is incorrect". If regional short date is "dd-MMM-yy", there is no exception error.
Without setting regional manually, how could we manage to convert by coding?
Should we use System.Globalization? If so, please share me a sample.
use Date.ParseExact
Dim dateString As String = "06/15/2008"
Dim format As String = "MM/dd/yyyy"
Dim provider As CultureInfo = CultureInfo.InvariantCulture
Dim _NewDate As Date = Date.ParseExact(dateString, format, provider)
It looks like you're trying to change the format of a date representation, but you haven't told us what format you're converting from. John's code shows correctly how to parse a value - but it looks like that's the target value you want. Suppose your input is something like "2012-11-15", i.e. yyyy-MM-dd. Then you'd want:
Dim inputText = "2012-11-15"
Dim inputFormat = "yyyy-MM-dd"
Dim outputFormat = "MM/dd/yyyy"
Dim provider = CultureInfo.InvariantCulture
Dim parsedDate = Date.ParseExact(inputText, inputFormat, provider)
Dim outputDate = parsedDate.ToString(outputFormat, provider)
Note that the use of the invariant culture here isolates you completely from culture sensitivity. Is that actually what you want, or do you perhaps want to treat your input according to the user culture, but not the output?

isDate control on european data in vb.net

How can i do a isDate() control on a date like 16/01/2008 in vb.net?
To check if 16/01/2008 is a valid date, you do:
Dim result As Date
If Date.TryParse("16/01/2008", result) Then
'The date is valid '
End If
Now this will use the current culture set. If you want to validate it against a specific culture, you can do it like this (example with french culture):
If Date.TryParse("16/01/2008", Globalization.CultureInfo.GetCultureInfo("fr-FR"), _
Globalization.DateTimeStyles.None, result) Then
'The date is valid '
End If
If the date format in your input data is fixed to month/day/year and does not depend on the current culture, you should use DateTime.TryParseExact:
Public Shared Function IsValidInputDate(ByVal str As String) As Boolean
Dim dt as DateTime
Return DateTime.TryParseExact(str, "d/M/yyyy", Nothing, Globalization.DateTimeStyles.None, dt)
End Function