Max Wanadoo
max.wanadoo at gmail.com
Thu Oct 22 02:00:42 CDT 2009
What about?
1. 9 <enter> - month 9 same year
2. 99 <enter> - month 9 year 2009.
3. 999 <enter> - day 9, month 9, year 2009
Have you put these through the code and see what they come out with?
Max
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Shamil
Salakhetdinov
Sent: 21 October 2009 23:47
To: 'Access Developers discussion and problem solving'
Subject: Re: [AccessD] All-In-One Date format Function:
Hi Robert,
Just a quick & dirty code snippet - it's C# but simulates VBA as close as
possible:
using System;
using VBA = Microsoft.VisualBasic.Strings;
namespace TestConsole.App
{
public class DateConvertor
{
public static DateTime Convert(string dateStr)
{
string temp = dateStr;
string monthStr;
string dayStr;
string yearStr;
DateTime retValue = DateTime.MinValue;
if (VBA.Left(temp, 1) == "1" ||
VBA.Left(temp, 1) == "0")
{
// two digits monthNum
monthStr = VBA.Left(temp, 2);
temp = VBA.Mid(temp, 3);
}
else
{
// one digits monthNum
monthStr = VBA.Left(temp, 1);
temp = VBA.Mid(temp, 2);
}
if (VBA.Len(temp) < 2)
throw new ApplicationException("Invalid date format: " +
dateStr);
else if (VBA.Len(temp) == 2)
{
temp = "00" + temp;
}
else if (
(VBA.Left(temp, 1) == "/") ||
(VBA.Left(temp, 1) == "-")
)
{
temp = VBA.Mid(temp, 2);
}
dayStr = VBA.Left(temp, 2);
temp = VBA.Mid(temp, 3);
if (
(VBA.Left(temp, 1) == "/") ||
(VBA.Left(temp, 1) == "-")
)
temp = VBA.Mid(temp, 2);
if (VBA.Len(temp) == 1) temp = "200" + temp;
else if (VBA.Len(temp) == 2) temp = "20" + temp;
yearStr = temp;
retValue = (dayStr != "00") ?
Microsoft.VisualBasic.DateAndTime.DateSerial(
Int32.Parse(yearStr),
Int32.Parse(monthStr),
Int32.Parse(dayStr)) :
Microsoft.VisualBasic.DateAndTime.DateSerial(
Int32.Parse(yearStr),
Int32.Parse(monthStr) + 1,
0);
return retValue;
}
public static string[] TestDates
{
get
{
return
new string[]
{
"909",
"0909",
"09/21/09",
"09-21-09",
"092109",
"92109",
"9212009"
};
}
}
public static void Test()
{
Console.WriteLine("// Test Output:");
Console.WriteLine("// ------------");
foreach (string date in TestDates)
{
Console.WriteLine("// {0} => {1:MM/dd/yyyy}", date,
Convert(date));
}
// Test Output:
// ------------
// 909 => 09/30/2009
// 0909 => 09/30/2009
// 09/21/09 => 09/21/2009
// 09-21-09 => 09/21/2009
// 092109 => 09/21/2009
// 92109 => 09/21/2009
// 9212009 => 09/21/2009
}
}
}
HTH.
--
Shamil
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Robert
Sent: Wednesday, October 21, 2009 10:17 PM
To: 'Access Developers discussion and problem solving'
Subject: [AccessD] All-In-One Date format Function:
Hoooooowdy,
Before re-inventing the wheel here, does anyone have or know of a function
that can handle "free form" date formatting. I'm looking for a function that
can parse any input and then format is correctly.
Example of user inputs:
0909
09/21/09
09-21-09
092109
92109
9212009
etc.
I don't want to use any formatting / Masking settings at the field or table
level. I would like the user to enter it the way they want to (to the most
degree possible)...
WBR
Robert
<<< snip >>>
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com