diff --git a/Doc/EWSoftwarePDI.shfbproj b/Doc/EWSoftwarePDI.shfbproj index 155c992..f274ea3 100644 --- a/Doc/EWSoftwarePDI.shfbproj +++ b/Doc/EWSoftwarePDI.shfbproj @@ -26,7 +26,7 @@ - .NET Framework 4.0 + Cross-platform (.NET Core/.NET Standard) EWSoftware.PDI Namespace Documentation https://github.com/EWSoftware/PDI [v{%40HelpFileVersion}] Copyright \xA9 2003-2018, Eric Woodruff, All Rights Reserved @@ -34,16 +34,6 @@ VS2013 Standard - - - - - - @@ -59,7 +49,7 @@ Personal Data Interchange ASP.NET web server control designers developed by Eric Woodruff. Personal Data Interchange Windows Forms controls developed by Eric Woodruff. - 2015.1.19.0 + 2018.11.17.0 @@ -160,6 +150,7 @@ False ..\Source\ True + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/CSharpDemos/PDIDatesTest/App.ico b/Source/CSharpDemos/PDIDatesTest/App.ico deleted file mode 100644 index f8eb00f..0000000 Binary files a/Source/CSharpDemos/PDIDatesTest/App.ico and /dev/null differ diff --git a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs index 880b228..e3f8ce8 100644 --- a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs +++ b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.cs @@ -2,7 +2,7 @@ // System : EWSoftware PDI Demonstration Applications // File : PDIDatesTest.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 11/15/2018 +// Updated : 11/19/2018 // Note : Copyright 2003-2018, Eric Woodruff, All rights reserved // Compiler: Visual C# // @@ -22,8 +22,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Linq; -using System.Runtime.Serialization.Formatters.Soap; using System.Runtime.Serialization.Formatters.Binary; using System.Xml.Serialization; @@ -49,54 +47,58 @@ static void Main(string[] args) DateTimeCollection recurDates; int yearFrom, yearTo, idx; - if(args.GetUpperBound(0) < 1) + if(args.Length != 2) { - Console.WriteLine("Specify a starting and ending year"); - return; - } + Console.WriteLine("Using current year +/- 4 years for testing\r\n"); - try + yearFrom = DateTime.Today.Year - 4; + yearTo = yearFrom + 8; + } + else { - yearFrom = Convert.ToInt32(args[0]); - yearTo = Convert.ToInt32(args[1]); + try + { + yearFrom = Convert.ToInt32(args[0]); + yearTo = Convert.ToInt32(args[1]); - if(yearFrom < 1) - yearFrom = 1; + if(yearFrom < 1) + yearFrom = 1; - if(yearFrom > 9999) - yearFrom = 9999; + if(yearFrom > 9999) + yearFrom = 9999; - if(yearTo < 1) - yearTo = 1; + if(yearTo < 1) + yearTo = 1; - if(yearTo > 9999) - yearTo = 9999; + if(yearTo > 9999) + yearTo = 9999; - if(yearFrom > yearTo) + if(yearFrom > yearTo) + { + idx = yearFrom; + yearFrom = yearTo; + yearTo = idx; + } + } + catch { - idx = yearFrom; - yearFrom = yearTo; - yearTo = idx; + Console.WriteLine("Invalid year specified on command line"); + return; } } - catch - { - Console.WriteLine("Invalid year specified on command line"); - return; - } // Test DateUtils.CalculateOccurrenceDate - Console.WriteLine("Fourth weekday in January 2004: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0)); + Console.WriteLine("Fourth weekday in January 2018: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0)); - Console.WriteLine("Fourth weekday in January 2004 + 2: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2)); + Console.WriteLine("Fourth weekday in January 2018 + 2: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2)); - Console.WriteLine("Last weekend day in January 2004: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0)); + Console.WriteLine("Last weekend day in January 2018: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0)); - Console.WriteLine("Last weekend day in January 2004 + 2: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2)); + Console.WriteLine("Last weekend day in January 2018 + 2: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2)); // Pause to review output Console.WriteLine("Press ENTER to continue"); @@ -109,7 +111,7 @@ static void Main(string[] args) Console.WriteLine("Week start = Monday"); DayOfWeek dow = DayOfWeek.Monday; - for(year = 1998; year < 2010; year++) + for(year = yearFrom; year <= yearTo; year++) { for(idx = 1; idx < 54; idx++) if(idx != 53 || DateUtils.WeeksInYear(year, dow) == 53) @@ -176,58 +178,58 @@ static void Main(string[] args) // Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone Console.WriteLine("Expressed in Universal Time"); - Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", false)); - Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", false)); - Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", false)); - Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", false)); - Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.123", false)); - Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.98Z", false)); - Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", false)); - Console.WriteLine("20040314T102531.123+0830 = {0}", - DateUtils.FromISO8601String("20040314T102531.123+0830", false)); - - Console.WriteLine("\n2004-03-14 = {0}", DateUtils.FromISO8601String("2004-03-14", false)); - Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", false)); - Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", false)); - Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", false)); - Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.123", false)); - Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", false)); - Console.WriteLine("2004-03-14T10:25:31-04 = {0}", - DateUtils.FromISO8601String("2004-03-14T10:25:31-04", false)); - Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}", - DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", false)); + Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", false)); + Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", false)); + Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", false)); + Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", false)); + Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.123", false)); + Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.98Z", false)); + Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", false)); + Console.WriteLine("20180314T102531.123+0830 = {0}", + DateUtils.FromISO8601String("20180314T102531.123+0830", false)); + + Console.WriteLine("\n2018-03-14 = {0}", DateUtils.FromISO8601String("2018-03-14", false)); + Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", false)); + Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", false)); + Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", false)); + Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.123", false)); + Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", false)); + Console.WriteLine("2018-03-14T10:25:31-04 = {0}", + DateUtils.FromISO8601String("2018-03-14T10:25:31-04", false)); + Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}", + DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", false)); // Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone Console.WriteLine("\nExpressed in Local Time"); - Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", true)); - Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", true)); - Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", true)); - Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", true)); - Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.123", true)); - Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.98Z", true)); - Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", true)); - Console.WriteLine("20040314T102531.123+0830 = {0}", - DateUtils.FromISO8601String("20040314T102531.123+0830", true)); - - Console.WriteLine("\n2004-03-14 = {0}", DateUtils.FromISO8601String("2004-03-14", true)); - Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", true)); - Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", true)); - Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", true)); - Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.123", true)); - Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", true)); - Console.WriteLine("2004-03-14T10:25:31-04 = {0}", - DateUtils.FromISO8601String("2004-03-14T10:25:31-04", true)); - Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}", - DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", true)); + Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", true)); + Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", true)); + Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", true)); + Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", true)); + Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.123", true)); + Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.98Z", true)); + Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", true)); + Console.WriteLine("20180314T102531.123+0830 = {0}", + DateUtils.FromISO8601String("20180314T102531.123+0830", true)); + + Console.WriteLine("\n2018-03-14 = {0}", DateUtils.FromISO8601String("2018-03-14", true)); + Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", true)); + Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", true)); + Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", true)); + Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.123", true)); + Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", true)); + Console.WriteLine("2018-03-14T10:25:31-04 = {0}", + DateUtils.FromISO8601String("2018-03-14T10:25:31-04", true)); + Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}", + DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", true)); TimeSpan ts = DateUtils.FromISO8601TimeZone("+08"); @@ -545,18 +547,19 @@ static void Main(string[] args) Console.WriteLine("Holidays saved to Holidays.xml"); } - +#if NETFramework + // The SOAP formatter is only supported on the full .NET Framework // SOAP using(var fs = new FileStream("Holidays.soap", FileMode.Create)) { - SoapFormatter sf = new SoapFormatter(); + var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); // SOAP doesn't support generics directly so use an array sf.Serialize(fs, holidays.ToArray()); Console.WriteLine("Holidays saved to Holidays.soap"); } - +#endif // Binary using(var fs = new FileStream("Holidays.bin", FileMode.Create)) { @@ -592,18 +595,18 @@ static void Main(string[] args) Console.WriteLine("Holidays retrieved from Holidays.xml"); } - +#if NETFramework // SOAP using(var fs = new FileStream("Holidays.soap", FileMode.Open)) { - SoapFormatter sf = new SoapFormatter(); + var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); // As noted, SOAP doesn't support generics to an array is used instead holidays = new HolidayCollection((Holiday[])sf.Deserialize(fs)); Console.WriteLine("Holidays retrieved from Holidays.soap"); } - +#endif // Binary using(var fs = new FileStream("Holidays.bin", FileMode.Open)) { @@ -710,16 +713,16 @@ static void Main(string[] args) Console.WriteLine("Recurrence saved to Recurrence.xml"); } - +#if NETFramework // SOAP using(var fs = new FileStream("Recurrence.soap", FileMode.Create)) { - SoapFormatter sf = new SoapFormatter(); + var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); sf.Serialize(fs, rRecur); Console.WriteLine("Recurrence saved to Recurrence.soap"); } - +#endif // Binary using(var fs = new FileStream("Recurrence.bin", FileMode.Create)) { @@ -755,16 +758,16 @@ static void Main(string[] args) Console.WriteLine("Recurrence restored from Recurrence.xml"); } - +#if NETFramework // SOAP using(var fs = new FileStream("Recurrence.soap", FileMode.Open)) { - SoapFormatter sf = new SoapFormatter(); + var sf = new System.Runtime.Serialization.Formatters.Soap.SoapFormatter(); rRecur = (Recurrence)sf.Deserialize(fs); Console.WriteLine("Recurrence retrieved from Recurrence.soap"); } - +#endif // Binary using(var fs = new FileStream("Recurrence.bin", FileMode.Open)) { diff --git a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj index 69db796..c3927b8 100644 --- a/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj +++ b/Source/CSharpDemos/PDIDatesTest/PDIDatesTest.csproj @@ -1,158 +1,27 @@ - - + + - Local - 8.0.50727 - 2.0 - {98E6C0BF-CDA6-436B-9B9B-C1EB435F0FD8} - Debug - AnyCPU - App.ico - - - PDIDatesTest - PDIDatesTest.snk - JScript - Grid - IE50 - false Exe - PDIDatesTest - OnBuildSuccess - - - - - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - - - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - ..\..\EWSPDIDemos.ruleset - - - bin\Release\ - false - 285212672 - false - - - TRACE - - - false - 4096 - false - - - true - false - false - false - 4 - none - prompt - - + netcoreapp2.1 + False + False + False + False + False + False + ProductAttribute + PDIDatesTest.snk true + ..\..\EWSPDIDemos.ruleset + false + - - System - - - System.Runtime.Serialization.Formatters.Soap - - - System.XML - - - - - - Properties\AssemblyInfoShared.cs - - - - Code - - - Code - - - - - - - - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + - - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI - - - - - - - - - - \ No newline at end of file + + diff --git a/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs b/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs index 38a007e..2d7ab10 100644 --- a/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs +++ b/Source/CSharpDemos/PDIDatesTest/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/29/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/19/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Visual C# // // Assembly information for the demo application diff --git a/Source/CSharpDemos/PDIDatesTest/app.config b/Source/CSharpDemos/PDIDatesTest/app.config deleted file mode 100644 index 835290f..0000000 --- a/Source/CSharpDemos/PDIDatesTest/app.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/Source/CSharpDemos/PDIParserTest/App.ico b/Source/CSharpDemos/PDIParserTest/App.ico deleted file mode 100644 index 3a5525f..0000000 Binary files a/Source/CSharpDemos/PDIParserTest/App.ico and /dev/null differ diff --git a/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs b/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs index 01e5713..8e735f1 100644 --- a/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs +++ b/Source/CSharpDemos/PDIParserTest/PDIParserTest.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : PDIParserTest.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/24/2014 -// Note : Copyright 2003-2014, Eric Woodruff, All rights reserved +// Updated : 11/19/2018 +// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved // Compiler: Visual C# // // This is just a quick test of the PDI vCard and calendar parser classes in a console mode application @@ -19,6 +19,8 @@ // 08/19/2007 EFW Added support for vNote files //=============================================================================================================== +// Ignore Spelling: iso + using System; using System.IO; using System.Text; @@ -45,11 +47,10 @@ static void Main(string[] args) { string outputFolder, outputFile; - if(args.GetUpperBound(0) < 1) + if(args.Length != 2) { - Console.WriteLine("Specify a folder name containing PDI files and a different one for the " + - "output files."); - return; + Console.WriteLine("Using files from .\\PDIFiles for the test\r\n"); + args = new[] { @"..\..\..\..\..\..\PDIFiles", @"..\..\..\..\..\..\PDIFiles_Copy" }; } try diff --git a/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj b/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj index fcb2356..6c1bae5 100644 --- a/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj +++ b/Source/CSharpDemos/PDIParserTest/PDIParserTest.csproj @@ -1,155 +1,28 @@ - - + + - Local - 8.0.50727 - 2.0 - {7F445FE2-DE5A-45CA-BC6A-FA162CFA99CC} - Debug - AnyCPU - App.ico - - - PDIParserTest - PDIParserTest.snk - JScript - Grid - IE50 - false Exe - PDIParserTest - OnBuildSuccess - - - - - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - - - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - ..\..\EWSPDIDemos.ruleset - - - bin\Release\ - false - 285212672 - false - - - TRACE - - - false - 4096 - false - - - true - false - false - false - 4 - none - prompt - - + netcoreapp2.1 + False + False + False + False + False + False + ProductAttribute + PDIParserTest.snk true + ..\..\EWSPDIDemos.ruleset + false + - - System - - - - - - Properties\AssemblyInfoShared.cs - - - Code - - - Code - - - - - - - - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - + + - - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData - - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI - - - - - - - - - - \ No newline at end of file + + diff --git a/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs b/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs index c6902fd..8e3ead3 100644 --- a/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs +++ b/Source/CSharpDemos/PDIParserTest/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/29/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/19/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Visual C# // // Assembly information for the demo application diff --git a/Source/CSharpDemos/PDIParserTest/app.config b/Source/CSharpDemos/PDIParserTest/app.config deleted file mode 100644 index 835290f..0000000 --- a/Source/CSharpDemos/PDIParserTest/app.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs b/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs index 5bcf281..df6334a 100644 --- a/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs +++ b/Source/CSharpDemos/PDIWebDemoCS/App_Code/Global.asax.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : Global.asax.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/29/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/21/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // At application start up, a common set of time zones is loaded into the VCalendar.TimeZones collection and a @@ -48,7 +48,7 @@ protected void Application_Start(Object sender, EventArgs e) // as multiple sessions may try to access it at the same time. The parser will acquire a write // lock if it needs to merge a time zone component but since we are loading many time zones at // once, we'll lock it now. - VCalendar.TimeZones.Lock.AcquireWriterLock(250); + VCalendar.TimeZones.AcquireWriterLock(250); try { @@ -62,7 +62,7 @@ protected void Application_Start(Object sender, EventArgs e) } finally { - VCalendar.TimeZones.Lock.ReleaseWriterLock(); + VCalendar.TimeZones.ReleaseWriterLock(); } } diff --git a/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs b/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs index c7c00d8..5018d90 100644 --- a/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs +++ b/Source/CSharpDemos/PDIWebDemoCS/EventRecurTestForm.aspx.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : EventRecurTestForm.aspx.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/31/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/21/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // This page is used to demonstrate recurrence with the calendar components @@ -43,7 +43,7 @@ protected void Page_Load(object sender, EventArgs e) // The time zone information is loaded in the Application_Start event in Global.asax. We'll // acquire a reader lock on the time zone collection as it's possible other sessions could be // parsing calendars with time zone data that could change the collection. - VCalendar.TimeZones.Lock.AcquireReaderLock(250); + VCalendar.TimeZones.AcquireReaderLock(250); try { @@ -54,7 +54,7 @@ protected void Page_Load(object sender, EventArgs e) } finally { - VCalendar.TimeZones.Lock.ReleaseReaderLock(); + VCalendar.TimeZones.ReleaseReaderLock(); } // Set up some defaults for testing diff --git a/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics b/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics index 642a946..814850c 100644 --- a/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics +++ b/Source/CSharpDemos/PDIWebDemoCS/TimeZoneDB.ics @@ -2,12 +2,21 @@ BEGIN:VCALENDAR VERSION:2.0 PRODID:-//EWSoftware//PDI Class Library//EN BEGIN:VTIMEZONE -TZID:(UTC) Casablanca +TZID:(UTC) Coordinated Universal Time +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:Coordinated Universal Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+00:00) Casablanca BEGIN:STANDARD DTSTART:19701025T030000 TZOFFSETFROM:+0100 TZOFFSETTO:+0000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Morocco Standard Time END:STANDARD BEGIN:DAYLIGHT @@ -19,16 +28,7 @@ TZNAME:Morocco Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC) Coordinated Universal Time -BEGIN:STANDARD -DTSTART:19700101T000000 -TZOFFSETFROM:+0000 -TZOFFSETTO:+0000 -TZNAME:Coordinated Universal Time -END:STANDARD -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:(UTC) Dublin\, Edinburgh\, Lisbon\, London +TZID:(UTC+00:00) Dublin\, Edinburgh\, Lisbon\, London BEGIN:STANDARD DTSTART:19701025T020000 TZOFFSETFROM:+0100 @@ -45,7 +45,7 @@ TZNAME:GMT Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC) Monrovia\, Reykjavik +TZID:(UTC+00:00) Monrovia\, Reykjavik BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+0100 @@ -105,6 +105,23 @@ TZNAME:Romance Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+01:00) Sao Tome +BEGIN:STANDARD +DTSTART:19700105T010000 +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:Sao Tome Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700105T000000 +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:Sao Tome Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+01:00) Sarajevo\, Skopje\, Warsaw\, Zagreb BEGIN:STANDARD DTSTART:19701025T030000 @@ -131,23 +148,6 @@ TZNAME:W. Central Africa Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+01:00) Windhoek -BEGIN:STANDARD -DTSTART:19700405T020000 -TZOFFSETFROM:+0200 -TZOFFSETTO:+0100 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:Namibia Standard Time -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700906T020000 -TZOFFSETFROM:+0100 -TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU -TZNAME:Namibia Daylight Time -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE TZID:(UTC+02:00) Amman BEGIN:STANDARD DTSTART:19701030T010000 @@ -194,25 +194,34 @@ BEGIN:DAYLIGHT DTSTART:19700328T235959 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA TZNAME:Middle East Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+02:00) Cairo BEGIN:STANDARD -DTSTART:19700924T235959 +DTSTART:19700101T000000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH TZNAME:Egypt Standard Time END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+02:00) Chisinau +BEGIN:STANDARD +DTSTART:19701025T030000 +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +TZNAME:E. Europe Standard Time +END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700521T235959 +DTSTART:19700329T020000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=3TH -TZNAME:Egypt Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +TZNAME:E. Europe Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE @@ -225,28 +234,28 @@ RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1TH TZNAME:Syria Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700402T235959 +DTSTART:19700327T000000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1TH +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR TZNAME:Syria Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+02:00) E. Europe +TZID:(UTC+02:00) Gaza\, Hebron BEGIN:STANDARD -DTSTART:19701025T030000 +DTSTART:19701031T010000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:E. Europe Standard Time +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA +TZNAME:West Bank Gaza Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700329T020000 +DTSTART:19700328T010000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU -TZNAME:E. Europe Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA +TZNAME:West Bank Gaza Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE @@ -276,23 +285,6 @@ TZNAME:FLE Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+02:00) Istanbul -BEGIN:STANDARD -DTSTART:19701025T040000 -TZOFFSETFROM:+0300 -TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Turkey Standard Time -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700330T030000 -TZOFFSETFROM:+0200 -TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1MO -TZNAME:Turkey Daylight Time -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE TZID:(UTC+02:00) Jerusalem BEGIN:STANDARD DTSTART:19701025T020000 @@ -305,26 +297,27 @@ BEGIN:DAYLIGHT DTSTART:19700327T020000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4FR TZNAME:Jerusalem Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+02:00) Kaliningrad (RTZ 1) +TZID:(UTC+02:00) Kaliningrad BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 1 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0200 -TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 1 Daylight Time -END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+02:00) Khartoum +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:Sudan Standard Time +END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+02:00) Tripoli @@ -336,6 +329,15 @@ TZNAME:Libya Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+02:00) Windhoek +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:Namibia Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+03:00) Baghdad BEGIN:STANDARD DTSTART:19700101T000000 @@ -345,6 +347,15 @@ TZNAME:Arabic Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+03:00) Istanbul +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:Turkey Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+03:00) Kuwait\, Riyadh BEGIN:STANDARD DTSTART:19700101T000000 @@ -363,21 +374,13 @@ TZNAME:Belarus Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd (RTZ 2) +TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0400 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 2 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0300 -TZOFFSETTO:+0400 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 2 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+03:00) Nairobi @@ -391,17 +394,17 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+03:30) Tehran BEGIN:STANDARD -DTSTART:19700921T235959 +DTSTART:19700918T235959 TZOFFSETFROM:+0430 TZOFFSETTO:+0330 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3FR TZNAME:Iran Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700321T235959 +DTSTART:19700326T000000 TZOFFSETFROM:+0330 TZOFFSETTO:+0430 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SA +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4TH TZNAME:Iran Daylight Time END:DAYLIGHT END:VTIMEZONE @@ -415,24 +418,25 @@ TZNAME:Arabian Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+04:00) Astrakhan\, Ulyanovsk +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:Astrakhan Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+04:00) Baku BEGIN:STANDARD -DTSTART:19701025T050000 +DTSTART:19700101T000000 TZOFFSETFROM:+0500 TZOFFSETTO:+0400 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Azerbaijan Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700329T040000 -TZOFFSETFROM:+0400 -TZOFFSETTO:+0500 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU -TZNAME:Azerbaijan Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+04:00) Izhevsk\, Samara (RTZ 3) +TZID:(UTC+04:00) Izhevsk\, Samara BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+0500 @@ -450,6 +454,15 @@ TZNAME:Mauritius Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+04:00) Saratov +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:Saratov Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+04:00) Tbilisi BEGIN:STANDARD DTSTART:19700101T000000 @@ -486,21 +499,13 @@ TZNAME:West Asia Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+05:00) Ekaterinburg (RTZ 4) +TZID:(UTC+05:00) Ekaterinburg BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0600 TZOFFSETTO:+0500 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 4 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0500 -TZOFFSETTO:+0600 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 4 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+05:00) Islamabad\, Karachi @@ -557,21 +562,13 @@ TZNAME:Bangladesh Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+06:00) Novosibirsk (RTZ 5) +TZID:(UTC+06:00) Omsk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0700 TZOFFSETTO:+0600 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Russia TZ 5 Standard Time +TZNAME:Omsk Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0600 -TZOFFSETTO:+0700 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 5 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+06:30) Yangon (Rangoon) @@ -592,21 +589,49 @@ TZNAME:SE Asia Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+07:00) Krasnoyarsk (RTZ 6) +TZID:(UTC+07:00) Barnaul\, Gorno-Altaysk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:Altai Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Hovd +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:W. Mongolia Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Krasnoyarsk +BEGIN:STANDARD +DTSTART:19700101T000000 TZOFFSETFROM:+0800 TZOFFSETTO:+0700 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 6 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0700 -TZOFFSETTO:+0800 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 6 Daylight Time -END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Novosibirsk +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:Novosibirsk Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Tomsk +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:Tomsk Standard Time +END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+08:00) Beijing\, Chongqing\, Hong Kong\, Urumqi @@ -618,21 +643,13 @@ TZNAME:China Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+08:00) Irkutsk (RTZ 7) +TZID:(UTC+08:00) Irkutsk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0900 TZOFFSETTO:+0800 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 7 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0800 -TZOFFSETTO:+0900 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 7 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+08:00) Kuala Lumpur\, Singapore @@ -671,6 +688,24 @@ TZNAME:Ulaanbaatar Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+08:45) Eucla +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0945 +TZOFFSETTO:+0845 +TZNAME:Aus Central W. Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+09:00) Chita +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:Transbaikal Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+09:00) Osaka\, Sapporo\, Tokyo BEGIN:STANDARD DTSTART:19700101T000000 @@ -680,6 +715,23 @@ TZNAME:Tokyo Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+09:00) Pyongyang +BEGIN:STANDARD +DTSTART:19700501T233000 +TZOFFSETFROM:+0830 +TZOFFSETTO:+0900 +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1FR +TZNAME:North Korea Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700105T000000 +TZOFFSETFROM:+0900 +TZOFFSETTO:+0830 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:North Korea Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+09:00) Seoul BEGIN:STANDARD DTSTART:19700101T000000 @@ -689,21 +741,13 @@ TZNAME:Korea Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+09:00) Yakutsk (RTZ 8) +TZID:(UTC+09:00) Yakutsk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+1000 TZOFFSETTO:+0900 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 8 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0900 -TZOFFSETTO:+1000 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 8 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+09:30) Adelaide @@ -784,41 +828,42 @@ TZNAME:Tasmania Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+10:00) Magadan +TZID:(UTC+10:00) Vladivostok BEGIN:STANDARD -DTSTART:19701025T020000 -TZOFFSETFROM:+1200 +DTSTART:19700101T000000 +TZOFFSETFROM:+1100 TZOFFSETTO:+1000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Magadan Standard Time +TZNAME:Russia TZ 9 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+1000 -TZOFFSETTO:+1200 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Magadan Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+10:00) Vladivostok\, Magadan (RTZ 9) +TZID:(UTC+10:30) Lord Howe Island BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700405T020000 TZOFFSETFROM:+1100 -TZOFFSETTO:+1000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Russia TZ 9 Standard Time +TZOFFSETTO:+1030 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:Lord Howe Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+1000 +DTSTART:19701004T020000 +TZOFFSETFROM:+1030 TZOFFSETTO:+1100 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 9 Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +TZNAME:Lord Howe Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+11:00) Chokurdakh (RTZ 10) +TZID:(UTC+11:00) Bougainville Island +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Bougainville Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+11:00) Chokurdakh BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+1200 @@ -827,6 +872,33 @@ TZNAME:Russia TZ 10 Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+11:00) Magadan +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Magadan Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+11:00) Norfolk Island +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Norfolk Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+11:00) Sakhalin +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Sakhalin Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+11:00) Solomon Is.\, New Caledonia BEGIN:STANDARD DTSTART:19700101T000000 @@ -836,7 +908,7 @@ TZNAME:Central Pacific Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky (RTZ 11) +TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+1300 @@ -873,10 +945,10 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+12:00) Fiji BEGIN:STANDARD -DTSTART:19700118T020000 +DTSTART:19700111T030000 TZOFFSETFROM:+1300 TZOFFSETTO:+1200 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=3SU +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=2SU TZNAME:Fiji Standard Time END:STANDARD BEGIN:DAYLIGHT @@ -905,6 +977,32 @@ TZNAME:Kamchatka Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+12:45) Chatham Islands +BEGIN:STANDARD +DTSTART:19700405T034500 +TZOFFSETFROM:+1345 +TZOFFSETTO:+1245 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:Chatham Islands Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700927T024500 +TZOFFSETFROM:+1245 +TZOFFSETTO:+1345 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +TZNAME:Chatham Islands Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+13:00) Coordinated Universal Time+13 +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1300 +TZOFFSETTO:+1300 +TZNAME:UTC+13 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+13:00) Nuku'alofa BEGIN:STANDARD DTSTART:19700101T000000 @@ -916,14 +1014,14 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+13:00) Samoa BEGIN:STANDARD -DTSTART:19700405T010000 +DTSTART:19700405T040000 TZOFFSETFROM:+1400 TZOFFSETTO:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:Samoa Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700927T000000 +DTSTART:19700927T030000 TZOFFSETFROM:+1300 TZOFFSETTO:+1400 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU @@ -992,6 +1090,15 @@ TZNAME:Mid-Atlantic Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-03:00) Araguaina +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:Tocantins Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-03:00) Brasilia BEGIN:STANDARD DTSTART:19700221T235959 @@ -1001,29 +1108,29 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA TZNAME:E. South America Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19701017T235959 +DTSTART:19701107T235959 TZOFFSETFROM:-0300 TZOFFSETTO:-0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA TZNAME:E. South America Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-03:00) Buenos Aires +TZID:(UTC-03:00) Cayenne\, Fortaleza BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:-0200 TZOFFSETTO:-0300 -TZNAME:Argentina Standard Time +TZNAME:SA Eastern Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-03:00) Cayenne\, Fortaleza +TZID:(UTC-03:00) City of Buenos Aires BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:-0200 TZOFFSETTO:-0300 -TZNAME:SA Eastern Standard Time +TZNAME:Argentina Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE @@ -1039,25 +1146,43 @@ BEGIN:DAYLIGHT DTSTART:19700328T220000 TZOFFSETFROM:-0300 TZOFFSETTO:-0200 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA TZNAME:Greenland Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC-03:00) Montevideo BEGIN:STANDARD -DTSTART:19700308T020000 +DTSTART:19700101T000000 TZOFFSETFROM:-0200 TZOFFSETTO:-0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:Montevideo Standard Time END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-03:00) Punta Arenas +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:Magallanes Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-03:00) Saint Pierre and Miquelon +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Saint Pierre Standard Time +END:STANDARD BEGIN:DAYLIGHT -DTSTART:19701004T020000 +DTSTART:19700308T020000 TZOFFSETFROM:-0300 TZOFFSETTO:-0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU -TZNAME:Montevideo Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Saint Pierre Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE @@ -1121,6 +1246,15 @@ TZNAME:Atlantic Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-04:00) Caracas +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:Venezuela Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-04:00) Cuiaba BEGIN:STANDARD DTSTART:19700221T235959 @@ -1130,10 +1264,10 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA TZNAME:Central Brazilian Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19701017T235959 +DTSTART:19701107T235959 TZOFFSETFROM:-0400 TZOFFSETTO:-0300 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA TZNAME:Central Brazilian Daylight Time END:DAYLIGHT END:VTIMEZONE @@ -1149,36 +1283,36 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC-04:00) Santiago BEGIN:STANDARD -DTSTART:19700425T235959 +DTSTART:19700509T235959 TZOFFSETFROM:-0300 TZOFFSETTO:-0400 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SA +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA TZNAME:Pacific SA Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700905T235959 +DTSTART:19700808T235959 TZOFFSETFROM:-0400 TZOFFSETTO:-0300 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA TZNAME:Pacific SA Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-04:30) Caracas +TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco BEGIN:STANDARD DTSTART:19700101T000000 -TZOFFSETFROM:-0330 -TZOFFSETTO:-0430 -TZNAME:Venezuela Standard Time +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:SA Pacific Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco +TZID:(UTC-05:00) Chetumal BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 -TZNAME:SA Pacific Standard Time +TZNAME:Eastern Standard Time (Mexico) END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE @@ -1199,6 +1333,40 @@ TZNAME:Eastern Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-05:00) Haiti +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Haiti Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700308T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Haiti Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-05:00) Havana +BEGIN:STANDARD +DTSTART:19701101T010000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Cuba Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700308T000000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Cuba Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-05:00) Indiana (East) BEGIN:STANDARD DTSTART:19701101T020000 @@ -1216,6 +1384,23 @@ TZNAME:US Eastern Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-05:00) Turks and Caicos +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Turks and Caicos Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700105T000000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:Turks and Caicos Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-06:00) Central America BEGIN:STANDARD DTSTART:19700101T000000 @@ -1242,6 +1427,23 @@ TZNAME:Central Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-06:00) Easter Island +BEGIN:STANDARD +DTSTART:19700509T220000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA +TZNAME:Easter Island Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700808T220000 +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA +TZNAME:Easter Island Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-06:00) Guadalajara\, Mexico City\, Monterrey BEGIN:STANDARD DTSTART:19701025T020000 @@ -1313,21 +1515,30 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC-08:00) Baja California BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19701101T020000 TZOFFSETFROM:-0700 TZOFFSETTO:-0800 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU TZNAME:Pacific Standard Time (Mexico) END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700405T020000 +DTSTART:19700308T020000 TZOFFSETFROM:-0800 TZOFFSETTO:-0700 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:Pacific Daylight Time (Mexico) END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-08:00) Coordinated Universal Time-08 +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:UTC-08 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-08:00) Pacific Time (US & Canada) BEGIN:STANDARD DTSTART:19701101T020000 @@ -1362,6 +1573,41 @@ TZNAME:Alaskan Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-09:00) Coordinated Universal Time-09 +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:UTC-09 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-09:30) Marquesas Islands +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0830 +TZOFFSETTO:-0930 +TZNAME:Marquesas Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-10:00) Aleutian Islands +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0900 +TZOFFSETTO:-1000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Aleutian Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700308T020000 +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Aleutian Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-10:00) Hawaii BEGIN:STANDARD DTSTART:19700101T000000 diff --git a/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs b/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs index f6c2f7e..b2f0fd0 100644 --- a/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs +++ b/Source/CSharpDemos/PDIWebDemoCS/VTimeZoneTestForm.aspx.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : VTimeZoneTestForm.aspx.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/30/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/21/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // This page is used to demonstrate some of the time zone features of the PDI classes @@ -42,7 +42,7 @@ protected void Page_Load(object sender, EventArgs e) // The time zone information is loaded in the Application_Start event in Global.asax. We'll // acquire a reader lock on the time zone collection as it's possible other sessions could be // parsing calendars with time zone data that could change the collection. - VCalendar.TimeZones.Lock.AcquireReaderLock(250); + VCalendar.TimeZones.AcquireReaderLock(250); try { @@ -54,7 +54,7 @@ protected void Page_Load(object sender, EventArgs e) } finally { - VCalendar.TimeZones.Lock.ReleaseReaderLock(); + VCalendar.TimeZones.ReleaseReaderLock(); } txtSourceDate.Text = new DateTime(DateTime.Today.Year, 1, 1, 10, 0, 0).ToString("G"); diff --git a/Source/CSharpDemos/PDIWebDemoCS/Web.config b/Source/CSharpDemos/PDIWebDemoCS/Web.config index 84853db..b08f825 100644 --- a/Source/CSharpDemos/PDIWebDemoCS/Web.config +++ b/Source/CSharpDemos/PDIWebDemoCS/Web.config @@ -1,27 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh index 459d1a6..9002601 100644 Binary files a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh and b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Data.dll.refresh differ diff --git a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Web.Controls.dll.refresh b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Web.Controls.dll.refresh deleted file mode 100644 index 4acbfb0..0000000 Binary files a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.Web.Controls.dll.refresh and /dev/null differ diff --git a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh index dc27aeb..962275b 100644 Binary files a/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh and b/Source/CSharpDemos/PDIWebDemoCS/bin/EWSoftware.PDI.dll.refresh differ diff --git a/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo b/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo index 0ce07bc..dccbd2e 100644 --- a/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo +++ b/Source/CSharpDemos/PDIWebDemoCS/vwd.webinfo @@ -141,6 +141,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj b/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj index 5d17cb3..339c601 100644 --- a/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj +++ b/Source/CSharpDemos/PDIWinFormsTest/PDIWinFormsTest.csproj @@ -1,5 +1,5 @@  - + Local 8.0.50727 @@ -26,7 +26,7 @@ 3.5 - v4.0 + v4.7.2 publish\ true @@ -67,6 +67,7 @@ full prompt ..\..\EWSPDIDemos.ruleset + false bin\Release\ @@ -90,10 +91,14 @@ 4 none prompt + false true + + app.manifest + System @@ -192,6 +197,7 @@ + @@ -212,17 +218,17 @@ - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData + + {5eda55cb-e991-4c50-93cb-149d7c4d498c} + EWSoftware.PDI.Data - - {dbd186a2-8160-4bf3-92d4-61bf262f0ca2} - EWSPDIWinForms + + {af3e8bed-a706-4c25-8379-2882641a221a} + EWSoftware.PDI.Windows.Forms - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI + + {024821de-3508-476a-97e7-441334a1b2df} + EWSoftware.PDI diff --git a/Source/CSharpDemos/PDIWinFormsTest/app.config b/Source/CSharpDemos/PDIWinFormsTest/app.config index 835290f..047b3b0 100644 --- a/Source/CSharpDemos/PDIWinFormsTest/app.config +++ b/Source/CSharpDemos/PDIWinFormsTest/app.config @@ -1,6 +1,9 @@ - + + + + diff --git a/Source/CSharpDemos/PDIWinFormsTest/app.manifest b/Source/CSharpDemos/PDIWinFormsTest/app.manifest new file mode 100644 index 0000000..e0f5061 --- /dev/null +++ b/Source/CSharpDemos/PDIWinFormsTest/app.manifest @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/CSharpDemos/RFC2445RecurTest/App.ico b/Source/CSharpDemos/RFC2445RecurTest/App.ico deleted file mode 100644 index 3a5525f..0000000 Binary files a/Source/CSharpDemos/RFC2445RecurTest/App.ico and /dev/null differ diff --git a/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs b/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs index 2deebc9..e87422b 100644 --- a/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs +++ b/Source/CSharpDemos/RFC2445RecurTest/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/29/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/20/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Visual C# // // Assembly information for the demo application diff --git a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs index 30a2a09..1833a28 100644 --- a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs +++ b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.cs @@ -2,8 +2,8 @@ // System : EWSoftware PDI Demonstration Applications // File : RFC2445RecurTest.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 12/24/2014 -// Note : Copyright 2003-2014, Eric Woodruff, All rights reserved +// Updated : 11/20/2018 +// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved // Compiler: Visual C# // // This creates the example recurrence patterns given in the RFC 2445 iCalendar specification starting on page diff --git a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj index fe7af56..1107b8c 100644 --- a/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj +++ b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.csproj @@ -1,159 +1,28 @@ - - + + - Local - 8.0.50727 - 2.0 - {32D480E1-5E35-46E8-8682-02EB5D3FC3DC} - Debug - AnyCPU - App.ico - - - RFC2445RecurTest - RCS2445RecurTest.snk - JScript - Grid - IE50 - false Exe - RFC2445RecurTest - OnBuildSuccess - - - - - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - - - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - ..\..\EWSPDIDemos.ruleset - - - bin\Release\ - false - 285212672 - false - - - TRACE - - - false - 4096 - false - - - true - false - false - false - 4 - none - prompt - - + netcoreapp2.1 + False + False + False + False + False + False + ProductAttribute + RFC2445RecurTest.snk true + ..\..\EWSPDIDemos.ruleset + false + - - System - - - System.XML - - - - - - Properties\AssemblyInfoShared.cs - - - - Code - - - Code - + + - + + - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData - - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI - - - - - - - - - - \ No newline at end of file + + diff --git a/Source/CSharpDemos/RFC2445RecurTest/RCS2445RecurTest.snk b/Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.snk similarity index 100% rename from Source/CSharpDemos/RFC2445RecurTest/RCS2445RecurTest.snk rename to Source/CSharpDemos/RFC2445RecurTest/RFC2445RecurTest.snk diff --git a/Source/CSharpDemos/RFC2445RecurTest/app.config b/Source/CSharpDemos/RFC2445RecurTest/app.config deleted file mode 100644 index 835290f..0000000 --- a/Source/CSharpDemos/RFC2445RecurTest/app.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/Source/CSharpDemos/vCardBrowser/PhotoControl.cs b/Source/CSharpDemos/vCardBrowser/PhotoControl.cs index 622196c..fe6baf6 100644 --- a/Source/CSharpDemos/vCardBrowser/PhotoControl.cs +++ b/Source/CSharpDemos/vCardBrowser/PhotoControl.cs @@ -107,7 +107,7 @@ public string ImageFilename { bmImage.Dispose(); - if(!String.IsNullOrEmpty(value)) + if(!String.IsNullOrWhiteSpace(value)) bmImage = new Bitmap(value); else bmImage = new Bitmap(1, 1); diff --git a/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs b/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs index 74e900c..4d099ee 100644 --- a/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs +++ b/Source/CSharpDemos/vCardBrowser/Properties/Resources.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -19,7 +19,7 @@ namespace vCardBrowser.Properties { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class Resources { diff --git a/Source/CSharpDemos/vCardBrowser/app.config b/Source/CSharpDemos/vCardBrowser/app.config index 835290f..75f0734 100644 --- a/Source/CSharpDemos/vCardBrowser/app.config +++ b/Source/CSharpDemos/vCardBrowser/app.config @@ -1,6 +1,9 @@ - + + + + diff --git a/Source/CSharpDemos/vCardBrowser/app.manifest b/Source/CSharpDemos/vCardBrowser/app.manifest new file mode 100644 index 0000000..5dbcd41 --- /dev/null +++ b/Source/CSharpDemos/vCardBrowser/app.manifest @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj b/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj index 9e4de41..e34fcf8 100644 --- a/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj +++ b/Source/CSharpDemos/vCardBrowser/vCardBrowser.csproj @@ -1,5 +1,5 @@  - + Local 8.0.50727 @@ -26,7 +26,7 @@ 3.5 - v4.0 + v4.7.2 false publish\ @@ -96,6 +96,9 @@ true + + app.manifest + System @@ -220,6 +223,7 @@ + @@ -240,17 +244,17 @@ - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData + + {5eda55cb-e991-4c50-93cb-149d7c4d498c} + EWSoftware.PDI.Data - - {dbd186a2-8160-4bf3-92d4-61bf262f0ca2} - EWSPDIWinForms + + {af3e8bed-a706-4c25-8379-2882641a221a} + EWSoftware.PDI.Windows.Forms - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI + + {024821de-3508-476a-97e7-441334a1b2df} + EWSoftware.PDI diff --git a/Source/EWSPDI.ruleset b/Source/EWSPDI.ruleset index c5ddaf1..bdf20b3 100644 --- a/Source/EWSPDI.ruleset +++ b/Source/EWSPDI.ruleset @@ -1,5 +1,5 @@  - + @@ -19,6 +19,7 @@ + @@ -29,4 +30,7 @@ - + + + + \ No newline at end of file diff --git a/Source/EWSPDI.sln b/Source/EWSPDI.sln index 7714824..16891ef 100644 --- a/Source/EWSPDI.sln +++ b/Source/EWSPDI.sln @@ -2,35 +2,21 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27004.2002 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDI", "EWSPDI\EWSPDI.csproj", "{23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWinForms", "EWSPDIWinForms\EWSPDIWinForms.csproj", "{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}" - ProjectSection(ProjectDependencies) = postProject - {13EB4641-36A6-4C9C-AF8C-29F3763D392F} = {13EB4641-36A6-4C9C-AF8C-29F3763D392F} - {7AAC8160-1975-47A2-A171-4C335E5A6C8C} = {7AAC8160-1975-47A2-A171-4C335E5A6C8C} - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} = {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIData", "EWSPDIData\EWSPDIData.csproj", "{13EB4641-36A6-4C9C-AF8C-29F3763D392F}" - ProjectSection(ProjectDependencies) = postProject - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} = {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - EndProjectSection -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWeb", "EWSPDIWeb\EWSPDIWeb.csproj", "{7AAC8160-1975-47A2-A171-4C335E5A6C8C}" - ProjectSection(ProjectDependencies) = postProject - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} = {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - EndProjectSection -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{5282D624-0EA3-4F39-939A-E5DFB8EAF3A8}" ProjectSection(SolutionItems) = preProject .editorconfig = .editorconfig EWSPDI.ruleset = EWSPDI.ruleset EndProjectSection EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{046CA387-A517-4922-9B8E-D5C1854F6194}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - EndProjectSection +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI", "EWSPDI\EWSoftware.PDI.csproj", "{FAB2E594-F7C2-4677-99F6-6F9717174DA3}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Data", "EWSPDIData\EWSoftware.PDI.Data.csproj", "{C5E24454-D754-4A09-874A-12ABEA8C6105}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Web.Controls", "EWSPDIWeb\EWSoftware.PDI.Web.Controls.csproj", "{66F7E06E-48A0-4DBF-99FE-560674B9C91F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Windows.Forms", "EWSPDIWinForms\EWSoftware.PDI.Windows.Forms.csproj", "{7A46908F-DB3F-4F75-B6D8-529E27E3B045}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSoftware.PDI.WinForms.Design", "EWSPDIWinForms\EWSoftware.PDI.WinForms.Design.csproj", "{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -38,22 +24,24 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.Build.0 = Release|Any CPU + {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FAB2E594-F7C2-4677-99F6-6F9717174DA3}.Release|Any CPU.Build.0 = Release|Any CPU + {C5E24454-D754-4A09-874A-12ABEA8C6105}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C5E24454-D754-4A09-874A-12ABEA8C6105}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C5E24454-D754-4A09-874A-12ABEA8C6105}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C5E24454-D754-4A09-874A-12ABEA8C6105}.Release|Any CPU.Build.0 = Release|Any CPU + {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66F7E06E-48A0-4DBF-99FE-560674B9C91F}.Release|Any CPU.Build.0 = Release|Any CPU + {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7A46908F-DB3F-4F75-B6D8-529E27E3B045}.Release|Any CPU.Build.0 = Release|Any CPU {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.Build.0 = Debug|Any CPU {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.Build.0 = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.Build.0 = Release|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/EWSPDI/Duration.cs b/Source/EWSPDI/Duration.cs index 74c9672..8143565 100644 --- a/Source/EWSPDI/Duration.cs +++ b/Source/EWSPDI/Duration.cs @@ -301,7 +301,7 @@ public Duration(string duration) int years = 0, months = 0, weeks = 0, days = 0, hours = 0, minutes = 0, seconds = 0; // If null or empty, default to zero - if(String.IsNullOrEmpty(duration)) + if(String.IsNullOrWhiteSpace(duration)) { ts = TimeSpan.Zero; return; diff --git a/Source/EWSPDI/EWSPDI.csproj b/Source/EWSPDI/EWSPDI.csproj deleted file mode 100644 index e49df3e..0000000 --- a/Source/EWSPDI/EWSPDI.csproj +++ /dev/null @@ -1,226 +0,0 @@ - - - - Local - 8.0.50727 - 2.0 - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - Debug - AnyCPU - - - - - EWSoftware.PDI - ..\EWSPDI.snk - JScript - Grid - IE50 - false - Library - EWSoftware.PDI - OnBuildSuccess - - - - - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - bin\Debug\EWSoftware.PDI.xml - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - ..\EWSPDI.ruleset - - - bin\Release\ - false - 285212672 - false - - - TRACE - bin\Release\EWSoftware.PDI.xml - true - 4096 - false - - - true - false - false - false - 4 - pdbonly - prompt - - - true - - - bin\ReleaseNoDoc\ - TRACE - 285212672 - bin\Release\EWSoftware.PDI.xml - true - 4096 - AnyCPU - prompt - false - false - false - pdbonly - true - - - - System - - - - System.XML - - - - - - - - - - - - - Code - - - Code - - - Code - - - Code - - - - - - Code - - - - - - Code - - - - - - - Code - - - Code - - - - - Code - - - - - - Code - - - - - - Code - - - - - Designer - - - Designer - - - EWSPDI.snk - - - - Recurrence.xsd - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - - - - - \ No newline at end of file diff --git a/Source/EWSPDI/EWSoftware.PDI.csproj b/Source/EWSPDI/EWSoftware.PDI.csproj new file mode 100644 index 0000000..8276ee7 --- /dev/null +++ b/Source/EWSPDI/EWSoftware.PDI.csproj @@ -0,0 +1,51 @@ + + + + netstandard2.0;net40 + True + true + Eric Woodruff + EWSoftware Personal Data Interchange Library + EWSoftware PDI Library + Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved + en + 2018.11.17.0 + 18.11.17.0 + This library contains the core set of useful Personal Data Interchange (PDI) and date utility classes for .NET applications. They can be used for calculating holiday dates, recurrences, etc. See the project website for the code, a help file, and demos. + Eric Woodruff + https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png + https://github.com/EWSoftware/PDI + git + PDI personal data interchange holiday calculation date recurrence RFC 2445 + https://github.com/EWSoftware/PDI + https://github.com/EWSoftware/PDI/blob/master/LICENSE + Targets .NET 4.0 and .NET Standard 2.0 and later + true + False + False + False + False + ..\EWSPDI.snk + ..\EWSPDI.ruleset + false + pdbonly + true + + + + + + + + + + true + \ + + + + + + + + diff --git a/Source/EWSPDI/Period.cs b/Source/EWSPDI/Period.cs index 3b8b086..79a0ac3 100644 --- a/Source/EWSPDI/Period.cs +++ b/Source/EWSPDI/Period.cs @@ -149,7 +149,7 @@ public Period(Period period) /// are not valid. public Period(string period) { - if(String.IsNullOrEmpty(period)) + if(String.IsNullOrWhiteSpace(period)) { this.StartDateTime = DateTime.MinValue; this.Duration = Duration.Zero; diff --git a/Source/EWSPDI/Properties/AssemblyInfo.cs b/Source/EWSPDI/Properties/AssemblyInfo.cs index f067348..2645f1c 100644 --- a/Source/EWSPDI/Properties/AssemblyInfo.cs +++ b/Source/EWSPDI/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : Personal Data Interchange Classes // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 10/14/2014 -// Note : Copyright 2003-2013, Eric Woodruff, All rights reserved +// Updated : 11/17/2018 +// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // PDI utility library assembly attributes @@ -26,6 +26,5 @@ // General assembly information [assembly: AssemblyTitle("Personal Data Interchange and Miscellaneous Date Utility Classes")] -[assembly: AssemblyDescription("A set of useful Personal Data Interchange (PDI) and date utility classes")] // See AssemblyInfoShared.cs for the shared attributes common to all projects in the solution diff --git a/Source/EWSPDI/Properties/AssemblyInfoShared.cs b/Source/EWSPDI/Properties/AssemblyInfoShared.cs index fa7c988..b4bfe2a 100644 --- a/Source/EWSPDI/Properties/AssemblyInfoShared.cs +++ b/Source/EWSPDI/Properties/AssemblyInfoShared.cs @@ -2,8 +2,8 @@ // System : Personal Data Interchange Classes // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 01/19/2015 -// Note : Copyright 2004-2015, Eric Woodruff, All rights reserved +// Updated : 11/17/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // PDI library common assembly attributes @@ -20,25 +20,17 @@ // 11/23/2004 EFW Fixed some problems with view state on dynamic image areas // 06/28/2006 EFW Reworked code for use with .NET 2.0 // 07/05/2013 EFW Updated for use with .NET 4.0 and converted the project to open source +// 11/17/2018 EFW Updated for use with .NET Standard 2.0 //=============================================================================================================== using System; using System.Reflection; -using System.Resources; using System.Runtime.InteropServices; // NOTE: See AssemblyInfo.cs for project-specific assembly attributes // General assembly information -[assembly: AssemblyProduct("EWSoftware Personal Data Interchange Library")] -[assembly: AssemblyCompany("Eric Woodruff")] -[assembly: AssemblyCopyright("Copyright \xA9 2003-2015, Eric Woodruff, All Rights Reserved")] [assembly: AssemblyCulture("")] -#if DEBUG -[assembly: AssemblyConfiguration("Debug")] -#else -[assembly: AssemblyConfiguration("Release")] -#endif // The assembly is CLS compliant [assembly: CLSCompliant(true)] @@ -46,9 +38,6 @@ // Not visible to COM [assembly: ComVisible(false)] -// Resources contained within the assembly are English -[assembly: NeutralResourcesLanguageAttribute("en")] - // Version numbers. All version numbers for an assembly consists of the following four values: // // Year of release @@ -62,16 +51,16 @@ // This is used to set the assembly version in the strong name. This should remain unchanged to maintain binary // compatibility with prior releases. It should only be changed if a breaking change is made that requires // assemblies that reference older versions to be recompiled against the newer version. -[assembly: AssemblyVersion("2015.1.19.0")] +[assembly: AssemblyVersion("2018.11.17.0")] // Common assembly file version // // This is used to set the assembly file version. This will change with each new release. MSIs only support a // Major value between 0 and 255 so we drop the century from the year on this one. -[assembly: AssemblyFileVersion("15.1.19.0")] +[assembly: AssemblyFileVersion("18.11.17.0")] // Common product version // // This may contain additional text to indicate Alpha or Beta states. The version number will always match the // file version above but includes the century on the year. -[assembly: AssemblyInformationalVersion("2015.1.19.0")] +[assembly: AssemblyInformationalVersion("2018.11.17.0")] diff --git a/NuGet/ReadMe_PDI.txt b/Source/EWSPDI/ReadMe.txt similarity index 100% rename from NuGet/ReadMe_PDI.txt rename to Source/EWSPDI/ReadMe.txt diff --git a/Source/EWSPDI/packages.config b/Source/EWSPDI/packages.config deleted file mode 100644 index 80db5ca..0000000 --- a/Source/EWSPDI/packages.config +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/Source/EWSPDIData/EWSPDIData.csproj b/Source/EWSPDIData/EWSPDIData.csproj deleted file mode 100644 index 242063b..0000000 --- a/Source/EWSPDIData/EWSPDIData.csproj +++ /dev/null @@ -1,406 +0,0 @@ - - - - Local - 8.0.50727 - 2.0 - {13EB4641-36A6-4C9C-AF8C-29F3763D392F} - Debug - AnyCPU - - - - - EWSoftware.PDI.Data - ..\EWSPDI.snk - JScript - Grid - IE50 - false - Library - EWSoftware.PDI - OnBuildSuccess - - - - - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - bin\Debug\EWSoftware.PDI.Data.xml - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - ..\EWSPDI.ruleset - - - bin\Release\ - false - 285212672 - false - - - TRACE - bin\Release\EWSoftware.PDI.Data.xml - true - 4096 - false - - - true - false - false - false - 4 - pdbonly - prompt - - - true - - - bin\ReleaseNoDoc\ - TRACE - 285212672 - bin\Release\EWSoftware.PDI.Data.xml - true - 4096 - AnyCPU - prompt - true - - - - System - - - - System.XML - - - EWSPDI - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - - - Properties\AssemblyInfoShared.cs - - - - Code - - - - - - - - - - - - - - - - - - Code - - - - Code - - - Code - - - Code - - - Code - - - Code - - - - - Code - - - Code - - - - Code - - - Code - - - - Code - - - - Code - - - - Code - - - - - - Code - - - - Code - - - - - - Code - - - - - Code - - - Code - - - - - Code - - - - - Code - - - - - - - Code - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - Code - - - Code - - - Code - - - - Code - - - Code - - - - - - - - - - - - - - - - - - - - - - Code - - - Code - - - Code - - - Code - - - - Code - - - Code - - - - Code - - - - - - - - Code - - - - - Code - - - - Code - - - - Code - - - - - - - - - Code - - - - - Code - - - - - - - - - Designer - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - EWSPDI.snk - - - - - - - - - - \ No newline at end of file diff --git a/Source/EWSPDIData/EWSoftware.PDI.Data.csproj b/Source/EWSPDIData/EWSoftware.PDI.Data.csproj new file mode 100644 index 0000000..6bc5372 --- /dev/null +++ b/Source/EWSPDIData/EWSoftware.PDI.Data.csproj @@ -0,0 +1,53 @@ + + + + netstandard2.0;net40 + True + true + Eric Woodruff + EWSoftware Personal Data Interchange Library + EWSoftware PDI Data Library + Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved + en + 2018.11.17.0 + 18.11.17.0 + This library contains classes used to create and consume vCard, vCalendar, and iCalendar files used to exchange contact and appointment information between applications such as Microsoft Outlook. See the project website for the code, a help file, and demos. + Eric Woodruff + https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png + https://github.com/EWSoftware/PDI + git + PDI personal data interchange vCard vCalendar iCalendar RFC 2426 2445 + https://github.com/EWSoftware/PDI + https://github.com/EWSoftware/PDI/blob/master/LICENSE + Targets .NET 4.0 and .NET Standard 2.0 and later + true + False + False + False + False + ..\EWSPDI.snk + ..\EWSPDI.ruleset + false + pdbonly + true + + + + + + + + + + + + + true + \ + + + + + + + diff --git a/Source/EWSPDIData/Data.PDIData.resx b/Source/EWSPDIData/PDIData.resx similarity index 100% rename from Source/EWSPDIData/Data.PDIData.resx rename to Source/EWSPDIData/PDIData.resx diff --git a/Source/EWSPDIData/PDIObjects/VCalendar.cs b/Source/EWSPDIData/PDIObjects/VCalendar.cs index 29343c8..e5b363c 100644 --- a/Source/EWSPDIData/PDIObjects/VCalendar.cs +++ b/Source/EWSPDIData/PDIObjects/VCalendar.cs @@ -2,8 +2,8 @@ // System : Personal Data Interchange Classes // File : VCalendar.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 11/06/2013 -// Note : Copyright 2004-2013, Eric Woodruff, All rights reserved +// Updated : 11/20/2013 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // This file contains the definition for the vCalendar/iCalendar object. @@ -24,6 +24,7 @@ using System; using System.Globalization; using System.IO; +using System.Linq; using System.Runtime.Serialization; using System.Security; using System.Text; @@ -63,11 +64,6 @@ public class VCalendar : CalendarObject, ISerializable, IDisposable // This is a catch-all that holds all unknown or extension properties private CustomPropertyCollection customProps; - // iCalendar only. It's also shared by all instances for a common source of time zone info. This also - // saves us from having to introduce some method of letting the sub-objects like events know who their - // containing calendar is in order to get a reference to a time zone collection. - private static VTimeZoneCollection timeZones = new VTimeZoneCollection(); - #endregion #region Properties @@ -77,10 +73,7 @@ public class VCalendar : CalendarObject, ISerializable, IDisposable /// This is used to establish the specification versions supported by the PDI object /// /// Supports vCalendar 1.0 and iCalendar 2.0 - public override SpecificationVersions VersionsSupported - { - get { return SpecificationVersions.vCalendar10 | SpecificationVersions.iCalendar20; } - } + public override SpecificationVersions VersionsSupported => SpecificationVersions.vCalendar10 | SpecificationVersions.iCalendar20; /// /// This is used to get the Product ID (PRODID) property @@ -182,14 +175,15 @@ public DaylightProperty VCalendarDaylightRule /// This is used to hold a set of time zone (VTIMEZONE) objects associated with calendars /// /// If the returned collection is empty, there are no time zone items. This property is - /// only /// applicable to iCalendar 2.0 objects. + /// only applicable to iCalendar 2.0 objects. /// /// Note that all calendars share a common set of time zone information. Any time zone components - /// parsed are added to this collection if they do not exist or are merged into existing entries. - public static VTimeZoneCollection TimeZones - { - get { return timeZones; } - } + /// parsed are added to this collection if they do not exist or, if they do, are merged into existing + /// entries. This serves as a common source of time zone info. It also saves us from having to + /// introduce some method of letting the sub-objects like events know who their containing calendar is in + /// order to get a reference to a time zone collection. + /// + public static VTimeZoneCollection TimeZones { get; } = new VTimeZoneCollection(); /// /// This is used to hold a set of event (VEVENT) objects associated with the calendar @@ -283,15 +277,15 @@ public VCalendar() // Subscribe to the TimeZoneIdChanged event on the Time Zones collection so that the calendar can // update all owned objects with changes to time zone IDs. - timeZones.Lock.AcquireWriterLock(250); + TimeZones.AcquireWriterLock(250); try { - timeZones.TimeZoneIdChanged += tzid_TimeZoneIdChanged; + TimeZones.TimeZoneIdChanged += tzid_TimeZoneIdChanged; } finally { - timeZones.Lock.ReleaseWriterLock(); + TimeZones.ReleaseWriterLock(); } } @@ -345,15 +339,15 @@ protected virtual void Dispose(bool disposing) { // There are no unmanaged resources in this class. Just disconnect the event handler if not done // already. - timeZones.Lock.AcquireWriterLock(250); + TimeZones.AcquireWriterLock(250); try { - timeZones.TimeZoneIdChanged -= tzid_TimeZoneIdChanged; + TimeZones.TimeZoneIdChanged -= tzid_TimeZoneIdChanged; } finally { - timeZones.Lock.ReleaseWriterLock(); + TimeZones.ReleaseWriterLock(); } } #endregion @@ -478,7 +472,7 @@ public override void PropagateVersion() if(freebusy != null) freebusy.PropagateVersion(this.Version); - timeZones.PropagateVersion(this.Version); + TimeZones.PropagateVersion(this.Version); } } @@ -610,17 +604,17 @@ public override void WriteToStream(TextWriter tw, StringBuilder sb) if(tzIds.Count != 0) { // Lock it while we write the collection out - timeZones.Lock.AcquireReaderLock(250); + TimeZones.AcquireReaderLock(250); try { - foreach(VTimeZone tz in timeZones) + foreach(VTimeZone tz in TimeZones) if(tzIds.Contains(tz.TimeZoneId.Value)) tz.WriteToStream(tw, sb); } finally { - timeZones.Lock.ReleaseReaderLock(); + TimeZones.ReleaseReaderLock(); } } @@ -655,9 +649,7 @@ public override void WriteToStream(TextWriter tw, StringBuilder sb) /// Returns true if the object equals this instance, false if it does not public override bool Equals(object obj) { - VCalendar c = obj as VCalendar; - - if(c == null) + if(!(obj is VCalendar c)) return false; // The ToString() method returns a text representation of the calendar based on all of its settings @@ -712,14 +704,19 @@ private static void FindRules(DateTime convertDate, string timeZoneId, bool useL standardRule = daylightRule = null; standardDate = dstDate = DateTime.MinValue; - VTimeZone vtz = timeZones[timeZoneId]; + VTimeZone vtz = TimeZones[timeZoneId]; if(vtz == null) return; // In order to calculate the correct time, we need the UTC offset for standard time locally - TimeZone tzCurrent = TimeZone.CurrentTimeZone; - TimeSpan tsUTC = tzCurrent.GetUtcOffset(tzCurrent.GetDaylightChanges(convertDate.Year).End); + TimeZoneInfo tzCurrent = TimeZoneInfo.Local; + var rule = tzCurrent.GetAdjustmentRules().FirstOrDefault(a => convertDate.Date >= a.DateStart && + convertDate.Date <= a.DateEnd); + TimeSpan tsUTC = TimeSpan.Zero; + + if(rule != null) + tsUTC = tzCurrent.GetUtcOffset(rule.DateEnd); // Get the observance rules to use in the conversion foreach(ObservanceRule or in vtz.ObservanceRules) @@ -852,8 +849,6 @@ private static void FindRules(DateTime convertDate, string timeZoneId, bool useL /// or the unmodified date/time if it cannot be found. public static DateTime TimeZoneTimeToUtc(DateTime convertDate, string timeZoneId) { - ObservanceRule standardRule, daylightRule; - DateTime standardDate, dstDate; // We won't adjust values in year 1 or year 9999 as we could underflow or overflow the date/time // object. @@ -861,8 +856,8 @@ public static DateTime TimeZoneTimeToUtc(DateTime convertDate, string timeZoneId return convertDate; // Get the observance rules to use in the conversion - FindRules(convertDate, timeZoneId, false, out standardRule, out daylightRule, out standardDate, - out dstDate); + FindRules(convertDate, timeZoneId, false, out ObservanceRule standardRule, out ObservanceRule daylightRule, + out DateTime standardDate, out DateTime dstDate); // If neither observance rule was found, use it as-is if(standardRule == null && daylightRule == null) @@ -921,8 +916,6 @@ public static DateTime TimeZoneTimeToUtc(DateTime convertDate, string timeZoneId /// start date/time information and it has a zero length duration. public static DateTimeInstance UtcToTimeZoneTime(DateTime convertDate, string timeZoneId) { - ObservanceRule standardRule, daylightRule; - DateTime standardDate, dstDate; TimeZoneNameProperty tzn; DateTimeInstance dti = new DateTimeInstance(convertDate); @@ -935,8 +928,8 @@ public static DateTimeInstance UtcToTimeZoneTime(DateTime convertDate, string ti dti.TimeZoneId = timeZoneId; // Get the observance rules to use in the conversion - FindRules(convertDate.ToLocalTime(), timeZoneId, false, out standardRule, out daylightRule, - out standardDate, out dstDate); + FindRules(convertDate.ToLocalTime(), timeZoneId, false, out ObservanceRule standardRule, + out ObservanceRule daylightRule, out DateTime standardDate, out DateTime dstDate); // If neither observance rule was found, use it as-is if(standardRule == null && daylightRule == null) @@ -1043,9 +1036,6 @@ public static DateTimeInstance UtcToTimeZoneTime(DateTime convertDate, string ti /// start date/time information and it has a zero length duration. public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, string timeZoneId) { - ObservanceRule standardRule, daylightRule; - DateTime standardDate, daylightDate; - DateTimeInstance dti = new DateTimeInstance(convertDate); // We won't adjust values in year 1 or year 9999 as we could underflow or overflow the date/time @@ -1054,8 +1044,8 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str return dti; // Get the observance rules to use in the conversion - FindRules(convertDate, timeZoneId, false, out standardRule, out daylightRule, out standardDate, - out daylightDate); + FindRules(convertDate, timeZoneId, false, out ObservanceRule standardRule, + out ObservanceRule daylightRule, out DateTime standardDate, out DateTime daylightDate); // If neither observance rule was found, use it as-is if(standardRule == null && daylightRule == null) @@ -1076,13 +1066,13 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str standardRule.OffsetFrom.TimeSpanValue.Negate()).ToLocalTime(); // Base the time zone name on the local time's DST setting - if(TimeZone.CurrentTimeZone.IsDaylightSavingTime(dti.StartDateTime)) + if(TimeZoneInfo.Local.IsDaylightSavingTime(dti.StartDateTime)) { dti.StartIsDaylightSavingTime = dti.EndIsDaylightSavingTime = true; - dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.DaylightName; + dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.DaylightName; } else - dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.StandardName; + dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.StandardName; return dti; } @@ -1106,13 +1096,13 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str daylightRule.OffsetFrom.TimeSpanValue.Negate()).ToLocalTime(); // Base the time zone name on the local time's DST setting - if(TimeZone.CurrentTimeZone.IsDaylightSavingTime(dti.StartDateTime)) + if(TimeZoneInfo.Local.IsDaylightSavingTime(dti.StartDateTime)) { dti.StartIsDaylightSavingTime = dti.EndIsDaylightSavingTime = true; - dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.DaylightName; + dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.DaylightName; } else - dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.StandardName; + dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.StandardName; return dti; } @@ -1152,13 +1142,13 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str } // Base the time zone name on the local time's DST setting - if(TimeZone.CurrentTimeZone.IsDaylightSavingTime(dti.StartDateTime)) + if(TimeZoneInfo.Local.IsDaylightSavingTime(dti.StartDateTime)) { dti.StartIsDaylightSavingTime = dti.EndIsDaylightSavingTime = true; - dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.DaylightName; + dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.DaylightName; } else - dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZone.CurrentTimeZone.StandardName; + dti.StartTimeZoneName = dti.EndTimeZoneName = TimeZoneInfo.Local.StandardName; return dti; } @@ -1176,8 +1166,6 @@ public static DateTimeInstance TimeZoneTimeToLocalTime(DateTime convertDate, str /// start date/time information and it has a zero length duration. public static DateTimeInstance LocalTimeToTimeZoneTime(DateTime convertDate, string timeZoneId) { - ObservanceRule standardRule, daylightRule; - DateTime standardDate, daylightDate; TimeZoneNameProperty tzn; DateTimeInstance dti = new DateTimeInstance(convertDate); @@ -1190,8 +1178,8 @@ public static DateTimeInstance LocalTimeToTimeZoneTime(DateTime convertDate, str dti.TimeZoneId = timeZoneId; // Get the observance rules to use in the conversion - FindRules(convertDate, timeZoneId, true, out standardRule, out daylightRule, out standardDate, - out daylightDate); + FindRules(convertDate, timeZoneId, true, out ObservanceRule standardRule, out ObservanceRule daylightRule, + out DateTime standardDate, out DateTime daylightDate); // If neither observance rule was found, use it as-is if(standardRule == null && daylightRule == null) @@ -1299,7 +1287,7 @@ public static DateTimeInstance TimeZoneToTimeZone(DateTime convertDate, string s DateTimeInstance dti; // If one or both is not found, return it as-is - if(timeZones[sourceId] == null || timeZones[destId] == null) + if(TimeZones[sourceId] == null || TimeZones[destId] == null) dti = new DateTimeInstance(convertDate); else { @@ -1323,8 +1311,6 @@ public static DateTimeInstance TimeZoneToTimeZone(DateTime convertDate, string s /// start date/time information and it has a zero length duration. public static DateTimeInstance TimeZoneTimeInfo(DateTime infoDate, string timeZoneId) { - ObservanceRule standardRule, daylightRule; - DateTime standardDate, dstDate; TimeZoneNameProperty tzn; DateTimeInstance dti = new DateTimeInstance(infoDate); @@ -1337,8 +1323,8 @@ public static DateTimeInstance TimeZoneTimeInfo(DateTime infoDate, string timeZo dti.TimeZoneId = timeZoneId; // Get the observance rules to use in the conversion - FindRules(infoDate, timeZoneId, false, out standardRule, out daylightRule, out standardDate, - out dstDate); + FindRules(infoDate, timeZoneId, false, out ObservanceRule standardRule, out ObservanceRule daylightRule, + out DateTime standardDate, out DateTime dstDate); // If neither observance rule was found, use it as-is if(standardRule == null && daylightRule == null) diff --git a/Source/EWSPDIData/PDIObjects/VNote.cs b/Source/EWSPDIData/PDIObjects/VNote.cs index 6f0186f..d46579c 100644 --- a/Source/EWSPDIData/PDIObjects/VNote.cs +++ b/Source/EWSPDIData/PDIObjects/VNote.cs @@ -428,7 +428,7 @@ public void WriteToStream(TextWriter tw, StringBuilder sb) // The BODY property is required, all others are optional. However, it can be blank so we must force // it if it is blank. - if(body == null || String.IsNullOrEmpty(body.Value)) + if(body == null || String.IsNullOrWhiteSpace(body.Value)) tw.Write("BODY:\r\n"); else BaseProperty.WriteToStream(body, sb, tw); diff --git a/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs b/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs index 3481421..c4565dd 100644 --- a/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs +++ b/Source/EWSPDIData/PDIObjects/VTimeZoneCollection.cs @@ -2,8 +2,8 @@ // System : Personal Data Interchange Classes // File : VTimeZoneCollection.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 11/13/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/21/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // This file contains a collection class for VTimeZone objects @@ -23,7 +23,6 @@ using System.Collections; using System.Collections.Generic; using System.Diagnostics; -using System.Globalization; using System.Threading; using EWSoftware.PDI.Binding; @@ -34,10 +33,9 @@ namespace EWSoftware.PDI.Objects /// /// A type-safe collection of objects /// - /// The class has a type-safe enumerator. It also uses a to + /// The class has a type-safe enumerator. It also uses a to /// synchronize access to the underlying collection as it is used as a static collection in the /// object. - /// [Serializable, DebuggerDisplay("Count = {Count}")] public class VTimeZoneCollection : IList, ICollection, IEnumerable, IList, ICollection, IEnumerable @@ -46,38 +44,15 @@ public class VTimeZoneCollection : IList, ICollection, IEn //===================================================================== [NonSerialized] - private ReaderWriterLock rwl; - - private bool mergingEnabled; + private ReaderWriterLockSlim rwl; private List items; - [NonSerialized] - private object _syncRoot; #endregion #region Properties //===================================================================== - /// - /// This property returns a object that can be used to synchronize access - /// to the collection. - /// - /// This is useful for access to the collection in web - /// applications when enumerating the collection or bulk loading time zone components. It allows - /// multiple concurrent readers of the collection but only one writer at a time to the collection. - /// - public ReaderWriterLock Lock - { - get - { - if(rwl == null) - rwl = new ReaderWriterLock(); - - return rwl; - } - } - /// /// This is used to get or set whether merging of time zone information is disabled /// @@ -87,11 +62,8 @@ public ReaderWriterLock Lock /// merged with the existing one. If set to false, no merge will occur and the existing object's /// settings will remain unchanged. This can be set to false to speed up loading of calendar files and /// to preserve settings from a common set of time zone objects that you have loaded yourself. - public bool MergingEnabled - { - get { return mergingEnabled; } - set { mergingEnabled = value; } - } + public bool MergingEnabled { get; set; } + #endregion #region Events @@ -109,10 +81,7 @@ public bool MergingEnabled /// The event arguments protected virtual void OnTimeZoneIdChanged(TimeZoneIdChangedEventArgs e) { - var handler = TimeZoneIdChanged; - - if(handler != null) - handler(this, e); + TimeZoneIdChanged?.Invoke(this, e); } /// @@ -136,7 +105,7 @@ private void tzid_TimeZoneIdChanged(object sender, TimeZoneIdChangedEventArgs e) /// There are two overloads for the constructor public VTimeZoneCollection() { - mergingEnabled = true; + this.MergingEnabled = true; items = new List(); } @@ -164,7 +133,7 @@ public VTimeZoneCollection(IEnumerable timeZones) : this() /// There are two overloads for this method public int IndexOf(VTimeZone item) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -172,7 +141,7 @@ public int IndexOf(VTimeZone item) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -184,7 +153,7 @@ public int IndexOf(VTimeZone item) /// found. This version is much faster than the other version as it only has to compare ID values. public int IndexOf(string tzid) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -196,7 +165,7 @@ public int IndexOf(string tzid) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -214,7 +183,7 @@ public void Insert(int index, VTimeZone item) if(existing == null) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -223,7 +192,7 @@ public void Insert(int index, VTimeZone item) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } else @@ -232,7 +201,7 @@ public void Insert(int index, VTimeZone item) if(index != curIdx) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -245,7 +214,7 @@ public void Insert(int index, VTimeZone item) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } } @@ -270,7 +239,7 @@ public VTimeZone this[int index] { get { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -278,12 +247,12 @@ public VTimeZone this[int index] } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } set { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -294,7 +263,7 @@ public VTimeZone this[int index] } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } } @@ -310,7 +279,7 @@ public VTimeZone this[string timeZoneId] { get { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -322,12 +291,12 @@ public VTimeZone this[string timeZoneId] } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } set { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -342,7 +311,7 @@ public VTimeZone this[string timeZoneId] } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } } @@ -367,7 +336,7 @@ public void Add(VTimeZone item) /// public void Clear() { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -378,7 +347,7 @@ public void Clear() } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -389,7 +358,7 @@ public void Clear() /// True if found, false if not public bool Contains(VTimeZone item) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -397,7 +366,7 @@ public bool Contains(VTimeZone item) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -408,7 +377,7 @@ public bool Contains(VTimeZone item) /// The index at which to start copying public void CopyTo(VTimeZone[] array, int arrayIndex) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -416,7 +385,7 @@ public void CopyTo(VTimeZone[] array, int arrayIndex) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -427,7 +396,7 @@ public int Count { get { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -435,7 +404,7 @@ public int Count } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } } @@ -444,10 +413,7 @@ public int Count /// This collection is never read-only /// /// This always returns false - public bool IsReadOnly - { - get { return false; } - } + public bool IsReadOnly => false; /// /// Remove a from the collection @@ -456,7 +422,7 @@ public bool IsReadOnly /// True if the item was removed or false if it was not in the collection public bool Remove(VTimeZone item) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -470,7 +436,7 @@ public bool Remove(VTimeZone item) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } return false; @@ -555,19 +521,13 @@ void IList.Insert(int index, object value) /// The collection is not of a fixed size /// /// This always returns false - public bool IsFixedSize - { - get { return false; } - } + public bool IsFixedSize => false; /// /// The collection is not read-only /// /// This always returns false - bool IList.IsReadOnly - { - get { return false; } - } + bool IList.IsReadOnly => false; /// /// Explicit IList.Remove implementation @@ -594,8 +554,8 @@ void IList.RemoveAt(int index) /// The item at the specified index object IList.this[int index] { - get { return this[index]; } - set { this[index] = (VTimeZone)value; } + get => this[index]; + set => this[index] = (VTimeZone)value; } #endregion @@ -616,45 +576,110 @@ void ICollection.CopyTo(Array array, int index) /// /// Explicit ICollection.Count implementation /// - int ICollection.Count - { - get { return this.Count; } - } + int ICollection.Count => this.Count; /// /// ICollection.IsSynchronized implementation /// /// This always returns true - public bool IsSynchronized - { - get { return true; } - } + public bool IsSynchronized => true; /// /// ICollection.SyncRoot implementation /// /// This provides a less efficient way of synchronizing access to the collection - public object SyncRoot + public object SyncRoot => ((ICollection)items).SyncRoot; + + #endregion + + #region Common helper methods + //===================================================================== + + /// + /// This can be used to acquire a reader lock on the collection to perform bulk read operations + /// + /// The timeout in milliseconds after which the lock attempt will fail + /// True if the reader lock should be upgradeable to a writer lock, + /// false if not. Typically, this should be false unless you may need to acquire a writer lock during + /// the period which the read lock is held. + /// Calls to this method should be paired with a call to + /// to release the lock when done. + /// + /// This is useful for access to the collection in web + /// applications when enumerating the collection or bulk loading time zone components. It allows + /// multiple concurrent readers of the collection but only one writer at a time to the collection. + /// + /// This is thrown if the timeout expires before acquiring the lock + public void AcquireReaderLock(int timeout, bool upgradeable = false) { - get + if(rwl == null) { - if(_syncRoot == null) + lock(this.SyncRoot) { - ICollection coll = items as ICollection; - - if(coll != null) - _syncRoot = coll.SyncRoot; - else - Interlocked.CompareExchange(ref _syncRoot, new object(), null); + if(rwl == null) + rwl = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); } + } + + bool success = false; - return _syncRoot; + if(upgradeable || rwl.IsUpgradeableReadLockHeld) + success = rwl.TryEnterUpgradeableReadLock(timeout); + else + success = rwl.TryEnterReadLock(timeout); + + if(!success) + throw new TimeoutException("Unable to obtain a reader lock on the time zone collection in the alloted time"); + } + + /// + /// This is used to free a reader lock previously acquired by calling + /// + public void ReleaseReaderLock() + { + if(rwl != null) + if(rwl.IsUpgradeableReadLockHeld) + rwl.ExitUpgradeableReadLock(); + else + if(rwl.IsReadLockHeld) + rwl.ExitReadLock(); + } + + /// + /// This can be used to acquire a writer lock on the collection to perform bulk updates + /// + /// The timeout in milliseconds after which the lock attempt will fail + /// Calls to this method should be paired with a call to + /// to release the lock when done. + /// + /// This is useful for access to the collection in web + /// applications when enumerating the collection or bulk loading time zone components. It allows + /// multiple concurrent readers of the collection but only one writer at a time to the collection. + /// + /// This is thrown if the timeout expires before acquiring the lock + public void AcquireWriterLock(int timeout) + { + if(rwl == null) + { + lock(this.SyncRoot) + { + if(rwl == null) + rwl = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); + } } + + if(!rwl.TryEnterWriteLock(timeout)) + throw new TimeoutException("Unable to obtain a reader lock on the time zone collection in the alloted time"); } - #endregion - #region Common helper methods - //===================================================================== + /// + /// This is used to free a writer lock previously acquired by calling + /// + public void ReleaseWriterLock() + { + if(rwl != null && rwl.IsWriteLockHeld) + rwl.ExitWriteLock(); + } /// /// Determine whether or not the collection contains at least one item that matches the conditions in the @@ -664,7 +689,7 @@ public object SyncRoot /// Returns true if at least one item matches the conditions or false if none of them do public bool Exists(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -672,7 +697,7 @@ public bool Exists(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -684,7 +709,7 @@ public bool Exists(Predicate match) /// is found. public VTimeZone Find(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -692,7 +717,7 @@ public VTimeZone Find(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -704,7 +729,7 @@ public VTimeZone Find(Predicate match) /// conditions defined by the specified predicate. If none are found, the collection will be empty. public ExtendedBindingList FindAll(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -719,7 +744,7 @@ public ExtendedBindingList FindAll(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -732,7 +757,7 @@ public ExtendedBindingList FindAll(Predicate match) /// defined by the predicate or -1 if nothing is found. public int FindIndex(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -740,7 +765,7 @@ public int FindIndex(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -754,7 +779,7 @@ public int FindIndex(Predicate match) /// defined by the predicate or -1 if nothing is found. public int FindIndex(int startIndex, Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -762,7 +787,7 @@ public int FindIndex(int startIndex, Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -777,7 +802,7 @@ public int FindIndex(int startIndex, Predicate match) /// defined by the predicate or -1 if nothing is found. public int FindIndex(int startIndex, int count, Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -785,7 +810,7 @@ public int FindIndex(int startIndex, int count, Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -797,7 +822,7 @@ public int FindIndex(int startIndex, int count, Predicate match) /// is found. public VTimeZone FindLast(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -805,7 +830,7 @@ public VTimeZone FindLast(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -818,7 +843,7 @@ public VTimeZone FindLast(Predicate match) /// defined by the predicate or -1 if nothing is found. public int FindLastIndex(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -826,7 +851,7 @@ public int FindLastIndex(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -840,7 +865,7 @@ public int FindLastIndex(Predicate match) /// defined by the predicate or -1 if nothing is found. public int FindLastIndex(int startIndex, Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -848,7 +873,7 @@ public int FindLastIndex(int startIndex, Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -863,7 +888,7 @@ public int FindLastIndex(int startIndex, Predicate match) /// defined by the predicate or -1 if nothing is found. public int FindLastIndex(int startIndex, int count, Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -871,7 +896,7 @@ public int FindLastIndex(int startIndex, int count, Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -881,7 +906,7 @@ public int FindLastIndex(int startIndex, int count, Predicate match) /// The delegate to perform on each item in the collection public void ForEach(Action action) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -889,7 +914,7 @@ public void ForEach(Action action) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -900,7 +925,7 @@ public void ForEach(Action action) /// Returns the number of items removed from the collection public int RemoveAll(Predicate match) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -908,7 +933,7 @@ public int RemoveAll(Predicate match) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -919,7 +944,7 @@ public int RemoveAll(Predicate match) /// The number of items to remove public void RemoveRange(int index, int count) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -927,7 +952,7 @@ public void RemoveRange(int index, int count) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -937,7 +962,7 @@ public void RemoveRange(int index, int count) /// Pass true for ascending order, false for descending order public void Sort(bool ascending) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -952,7 +977,7 @@ public void Sort(bool ascending) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -963,7 +988,7 @@ public void Sort(bool ascending) /// null to use the default comparer. public void Sort(IComparer comparer) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -971,7 +996,7 @@ public void Sort(IComparer comparer) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -981,7 +1006,7 @@ public void Sort(IComparer comparer) /// The delegate to use for the comparisons public void Sort(Comparison comparison) { - this.Lock.AcquireWriterLock(250); + this.AcquireWriterLock(250); try { @@ -989,7 +1014,7 @@ public void Sort(Comparison comparison) } finally { - this.Lock.ReleaseWriterLock(); + this.ReleaseWriterLock(); } } @@ -1003,7 +1028,7 @@ public void Sort(Comparison comparison) /// conditions. public bool TrueForAll(Predicate match) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -1011,7 +1036,7 @@ public bool TrueForAll(Predicate match) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } #endregion @@ -1038,7 +1063,7 @@ public void AddRange(IEnumerable timeZones) /// The version to use public void PropagateVersion(SpecificationVersions version) { - this.Lock.AcquireReaderLock(250); + this.AcquireReaderLock(250); try { @@ -1047,7 +1072,7 @@ public void PropagateVersion(SpecificationVersions version) } finally { - this.Lock.ReleaseReaderLock(); + this.ReleaseReaderLock(); } } @@ -1066,56 +1091,47 @@ public int Merge(VTimeZone vTimeZone) ObservanceRuleCollection rules; int idx, tzIdx; - this.Lock.AcquireReaderLock(250); + tzIdx = this.IndexOf(vTimeZone.TimeZoneId.Value); - try + if(tzIdx == -1) { - tzIdx = this.IndexOf(vTimeZone.TimeZoneId.Value); + this.AcquireWriterLock(250); - if(tzIdx == -1) + try { - LockCookie lc = this.Lock.UpgradeToWriterLock(250); + vTimeZone.TimeZoneId.TimeZoneIdChanged += tzid_TimeZoneIdChanged; + items.Add(vTimeZone); + tzIdx = items.Count - 1; + } + finally + { + this.ReleaseWriterLock(); + } + } + else // Merge the rules if allowed + if(this.MergingEnabled) + { + this.AcquireWriterLock(250); try { - vTimeZone.TimeZoneId.TimeZoneIdChanged += tzid_TimeZoneIdChanged; - items.Add(vTimeZone); - tzIdx = items.Count - 1; - } - finally - { - this.Lock.DowngradeFromWriterLock(ref lc); - } - } - else // Merge the rules if allowed - if(mergingEnabled) - { - LockCookie lc = this.Lock.UpgradeToWriterLock(250); + rules = items[tzIdx].ObservanceRules; - try + foreach(ObservanceRule or in vTimeZone.ObservanceRules) { - rules = items[tzIdx].ObservanceRules; + for(idx = 0; idx < rules.Count; idx++) + if(rules[idx].Equals(or)) + break; - foreach(ObservanceRule or in vTimeZone.ObservanceRules) - { - for(idx = 0; idx < rules.Count; idx++) - if(rules[idx].Equals(or)) - break; - - if(idx == rules.Count) - rules.Add(or); - } - } - finally - { - this.Lock.DowngradeFromWriterLock(ref lc); + if(idx == rules.Count) + rules.Add(or); } } - } - finally - { - this.Lock.ReleaseReaderLock(); - } + finally + { + this.ReleaseWriterLock(); + } + } return tzIdx; } diff --git a/Source/EWSPDIData/PDIParser/PDIParser.cs b/Source/EWSPDIData/PDIParser/PDIParser.cs index a1d4725..55e6acc 100644 --- a/Source/EWSPDIData/PDIParser/PDIParser.cs +++ b/Source/EWSPDIData/PDIParser/PDIParser.cs @@ -20,8 +20,9 @@ // 03/17/2007 EFW Updated for use with .NET 2.0 //=============================================================================================================== +// Ignore Spelling: vcp sr http https + using System; -using System.Globalization; using System.IO; using System.Net; using System.Text; @@ -454,7 +455,7 @@ public void ParseReader(TextReader tr) bool seenLF = false; if(tr == null) - throw new ArgumentNullException("tr", LR.GetString("ExParseNullReader")); + throw new ArgumentNullException(nameof(tr), LR.GetString("ExParseNullReader")); try { @@ -588,7 +589,7 @@ public void ParseFile(string filename) StreamReader sr = null; if(filename == null || filename.Length == 0) - throw new ArgumentNullException("filename", LR.GetString("ExParseNoFilename")); + throw new ArgumentNullException(nameof(filename), LR.GetString("ExParseNoFilename")); // Exceptions will bubble up to the caller try diff --git a/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs b/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs index 6e17ccb..f623240 100644 --- a/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs +++ b/Source/EWSPDIData/PDIProperties/FormattedNameProperty.cs @@ -70,17 +70,14 @@ public override string Value { string nameValue = base.Value; - if(String.IsNullOrEmpty(nameValue)) + if(String.IsNullOrWhiteSpace(nameValue)) return "Unknown"; return nameValue; } set { - if(value == null) - throw new ArgumentNullException("value", LR.GetString("ExFNCannotBeNull")); - - base.Value = value; + base.Value = value ?? throw new ArgumentNullException(nameof(value), LR.GetString("ExFNCannotBeNull")); } } @@ -97,17 +94,14 @@ public override string EncodedValue { string nameValue = base.EncodedValue; - if(String.IsNullOrEmpty(nameValue)) + if(String.IsNullOrWhiteSpace(nameValue)) return "Unknown"; return nameValue; } set { - if(value == null) - throw new ArgumentNullException("value", LR.GetString("ExFNCannotBeNull")); - - base.EncodedValue = value; + base.EncodedValue = value ?? throw new ArgumentNullException(nameof(value), LR.GetString("ExFNCannotBeNull")); } } #endregion diff --git a/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs b/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs index e6a0428..65c90ed 100644 --- a/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs +++ b/Source/EWSPDIData/PDIProperties/PercentCompleteProperty.cs @@ -107,7 +107,7 @@ public override string Value { percentage = 0; - if(!String.IsNullOrEmpty(value) && reNumber.IsMatch(value)) + if(!String.IsNullOrWhiteSpace(value) && reNumber.IsMatch(value)) { percentage = Convert.ToInt32(value, CultureInfo.InvariantCulture); diff --git a/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs b/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs index b977b2b..6f9f838 100644 --- a/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs +++ b/Source/EWSPDIData/PDIProperties/RecurrenceCountProperty.cs @@ -104,7 +104,7 @@ public override string Value { count = 0; - if(!String.IsNullOrEmpty(value) && reNumber.IsMatch(value)) + if(!String.IsNullOrWhiteSpace(value) && reNumber.IsMatch(value)) { count = Convert.ToInt32(value, CultureInfo.InvariantCulture); diff --git a/Source/EWSPDIData/PDIProperties/RepeatProperty.cs b/Source/EWSPDIData/PDIProperties/RepeatProperty.cs index b2450d5..7b8473a 100644 --- a/Source/EWSPDIData/PDIProperties/RepeatProperty.cs +++ b/Source/EWSPDIData/PDIProperties/RepeatProperty.cs @@ -105,7 +105,7 @@ public override string Value { repeatCount = 0; - if(!String.IsNullOrEmpty(value) && reNumber.IsMatch(value)) + if(!String.IsNullOrWhiteSpace(value) && reNumber.IsMatch(value)) { repeatCount = Convert.ToInt32(value, CultureInfo.InvariantCulture); diff --git a/Source/EWSPDIData/Properties/AssemblyInfo.cs b/Source/EWSPDIData/Properties/AssemblyInfo.cs index d2867b6..6b535d6 100644 --- a/Source/EWSPDIData/Properties/AssemblyInfo.cs +++ b/Source/EWSPDIData/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : Personal Data Interchange Classes // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 10/14/2014 -// Note : Copyright 2003-2014, Eric Woodruff, All rights reserved +// Updated : 11/18/2018 +// Note : Copyright 2003-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // PDI vCard, vCalendar, and iCalendar library assembly attributes @@ -25,8 +25,6 @@ [assembly: AllowPartiallyTrustedCallers()] // General assembly information -[assembly: AssemblyTitle("Personal Data Interchange vCard, vCalendar, and iCalendar library assembly attributes")] -[assembly: AssemblyDescription("A set of Personal Data Interchange (PDI) classes used to create and work with " + - "vCard, vCalendar, and iCalendar objects")] +[assembly: AssemblyTitle("Personal Data Interchange vCard, vCalendar, and iCalendar Classes")] // See AssemblyInfoShared.cs for the shared attributes common to all projects in the solution diff --git a/NuGet/ReadMe_PDIData.txt b/Source/EWSPDIData/ReadMe.txt similarity index 100% rename from NuGet/ReadMe_PDIData.txt rename to Source/EWSPDIData/ReadMe.txt diff --git a/Source/EWSPDIDemos.ruleset b/Source/EWSPDIDemos.ruleset index efed147..d223daa 100644 --- a/Source/EWSPDIDemos.ruleset +++ b/Source/EWSPDIDemos.ruleset @@ -1,5 +1,5 @@  - + @@ -20,6 +20,7 @@ + @@ -30,4 +31,7 @@ - + + + + \ No newline at end of file diff --git a/Source/EWSPDIWeb/EWSPDIWeb.csproj b/Source/EWSPDIWeb/EWSPDIWeb.csproj deleted file mode 100644 index 7804674..0000000 --- a/Source/EWSPDIWeb/EWSPDIWeb.csproj +++ /dev/null @@ -1,195 +0,0 @@ - - - - Local - 8.0.50727 - 2.0 - {7AAC8160-1975-47A2-A171-4C335E5A6C8C} - Debug - AnyCPU - - - - - EWSoftware.PDI.Web.Controls - ..\EWSPDI.snk - JScript - Flow - IE50 - false - Library - EWSoftware.PDI.Web.Controls - OnBuildSuccess - - - - - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\Debug\ - false - 285212672 - false - - - DEBUG;TRACE - bin\Debug\EWSoftware.PDI.Web.Controls.xml - true - 4096 - false - - - false - false - false - false - 4 - full - prompt - ..\EWSPDI.ruleset - - - bin\Release\ - false - 285212672 - false - - - TRACE - bin\Release\EWSoftware.PDI.Web.Controls.xml - true - 4096 - false - - - true - false - false - false - 4 - pdbonly - prompt - - - true - - - bin\ReleaseNoDoc\ - TRACE - 285212672 - bin\Release\EWSoftware.PDI.Web.Controls.xml - true - 4096 - AnyCPU - prompt - true - - - - System - - - System.Data - - - System.Design - - - System.Web - - - System.XML - - - EWSPDI - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - - - - - Properties\AssemblyInfoShared.cs - - - - Code - - - Code - - - Code - - - Code - - - - - - - - - - - - Designer - - - - EWSPDI.snk - - - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - - - - - \ No newline at end of file diff --git a/Source/EWSPDIWeb/EWSoftware.PDI.Web.Controls.csproj b/Source/EWSPDIWeb/EWSoftware.PDI.Web.Controls.csproj new file mode 100644 index 0000000..dcf0f70 --- /dev/null +++ b/Source/EWSPDIWeb/EWSoftware.PDI.Web.Controls.csproj @@ -0,0 +1,87 @@ + + + + net40 + True + true + Eric Woodruff + EWSoftware Personal Data Interchange Library + EWSoftware PDI Web Controls Library + Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved + en + 2018.11.17.0 + 18.11.17.0 + This library contains some web controls that can be used to edit recurrence settings. See the project website for the code, a help file, and demos. + Eric Woodruff + https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png + https://github.com/EWSoftware/PDI + git + PDI personal data interchange web controls recurrence RFC 2445 + https://github.com/EWSoftware/PDI + https://github.com/EWSoftware/PDI/blob/master/LICENSE + Targets .NET 4.0 and later + true + False + False + False + False + ..\EWSPDI.snk + ..\EWSPDI.ruleset + false + pdbonly + true + + + + + + + + + + + + + + + + + + + + + + + + + + true + \ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/EWSPDIWeb/Properties/AssemblyInfo.cs b/Source/EWSPDIWeb/Properties/AssemblyInfo.cs index 8b1e223..c988ecc 100644 --- a/Source/EWSPDIWeb/Properties/AssemblyInfo.cs +++ b/Source/EWSPDIWeb/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : EWSoftware.PDI ASP.NET Web Server Controls // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 10/14/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/18/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // ASP.NET web server controls that are used in conjunction with the EWSoftware.PDI classes @@ -18,6 +18,8 @@ // 02/10/2005 EFW Created the code //=============================================================================================================== +// Ignore Spelling: javascript css + using System.Reflection; using System.Security; using System.Web.UI; @@ -30,8 +32,6 @@ // General assembly information [assembly: AssemblyTitle("EWSoftware.PDI ASP.NET Web Server Controls")] -[assembly: AssemblyDescription("ASP.NET web server controls that are used in conjunction with the " + - "EWSoftware.PDI classes")] // Define the embedded resources [assembly: WebResource(EWSoftware.PDI.Web.Controls.RecurrencePattern.RecurrencePatternScripts + diff --git a/NuGet/ReadMe_PDIWebControls.txt b/Source/EWSPDIWeb/ReadMe.txt similarity index 100% rename from NuGet/ReadMe_PDIWebControls.txt rename to Source/EWSPDIWeb/ReadMe.txt diff --git a/Source/EWSPDIWinForms/DailyPattern.resx b/Source/EWSPDIWinForms/DailyPattern.resx index 4599e1f..c99841c 100644 --- a/Source/EWSPDIWinForms/DailyPattern.resx +++ b/Source/EWSPDIWinForms/DailyPattern.resx @@ -112,23 +112,23 @@ 2.0 - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - + NoControl - + 8, 8 72, 24 - + 0 @@ -139,7 +139,7 @@ rbEveryXDays - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -154,7 +154,7 @@ 8, 40 - 134, 24 + 174, 24 3 @@ -166,7 +166,7 @@ rbEveryWeekday - System.Windows.Forms.RadioButton, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.RadioButton, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -196,7 +196,7 @@ label1 - System.Windows.Forms.Label, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -208,7 +208,7 @@ 72, 10 - 48, 22 + 48, 26 1 @@ -220,7 +220,7 @@ udcDays - System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.NumericUpDown, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 $this @@ -228,7 +228,7 @@ 0 - + True @@ -238,6 +238,6 @@ DailyPattern - System.Windows.Forms.UserControl, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + System.Windows.Forms.UserControl, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 \ No newline at end of file diff --git a/Source/EWSPDIWinForms/EWSPDIWinForms.csproj b/Source/EWSPDIWinForms/EWSoftware.PDI.WinForms.Design.csproj similarity index 87% rename from Source/EWSPDIWinForms/EWSPDIWinForms.csproj rename to Source/EWSPDIWinForms/EWSoftware.PDI.WinForms.Design.csproj index 706fd19..16ca3a3 100644 --- a/Source/EWSPDIWinForms/EWSPDIWinForms.csproj +++ b/Source/EWSPDIWinForms/EWSoftware.PDI.WinForms.Design.csproj @@ -1,5 +1,5 @@  - + Local 8.0.50727 @@ -27,7 +27,7 @@ 3.5 - v4.0 + v4.7.2 publish\ true @@ -44,16 +44,18 @@ false false true + objDesignOnly\ - bin\Debug\ + binDesignOnly\Debug\ false 285212672 false DEBUG;TRACE - bin\Debug\EWSoftware.PDI.Windows.Forms.xml + + true 4096 false @@ -67,16 +69,18 @@ full prompt ..\EWSPDI.ruleset + false - bin\Release\ + binDesignOnly\Release\ false 285212672 false TRACE - bin\Release\EWSoftware.PDI.Windows.Forms.xml + + true 4096 false @@ -89,23 +93,11 @@ 4 pdbonly prompt + false true - - bin\ReleaseNoDoc\ - TRACE - 285212672 - bin\Release\EWSoftware.PDI.Windows.Forms.xml - true - 4096 - AnyCPU - prompt - false - true - true - System @@ -119,11 +111,6 @@ System.XML - - EWSPDI - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F} - {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - @@ -189,11 +176,6 @@ UserControl - - True - True - Resources.resx - UserControl @@ -263,10 +245,6 @@ ResXFileCodeGenerator PDIWinForms.Designer.cs - - ResXFileCodeGenerator - Resources.Designer.cs - RecurrencePattern.cs @@ -314,6 +292,12 @@ EWSPDI.snk + + + {024821de-3508-476a-97e7-441334a1b2df} + EWSoftware.PDI + + diff --git a/Source/EWSPDIWinForms/EWSoftware.PDI.Windows.Forms.csproj b/Source/EWSPDIWinForms/EWSoftware.PDI.Windows.Forms.csproj new file mode 100644 index 0000000..329131a --- /dev/null +++ b/Source/EWSPDIWinForms/EWSoftware.PDI.Windows.Forms.csproj @@ -0,0 +1,66 @@ + + + + net40 + True + true + Eric Woodruff + EWSoftware Personal Data Interchange Library + EWSoftware PDI Windows Forms Control Library + Copyright (c) 2003-2018, Eric Woodruff, All Rights Reserved + en + 2018.11.17.0 + 18.11.17.0 + This library contains some Windows Forms controls that can be used to edit holiday calculation settings and to edit recurrence settings. See the project website for the code, a help file, and demos. + Eric Woodruff + https://raw.githubusercontent.com/EWSoftware/PDI/master/EWSPDI.png + https://github.com/EWSoftware/PDI + git + PDI personal data interchange Windows Forms controls recurrence RFC 2445 + https://github.com/EWSoftware/PDI + https://github.com/EWSoftware/PDI/blob/master/LICENSE + Targets .NET 4.0 and later + true + False + False + False + False + ..\EWSPDI.snk + ..\EWSPDI.ruleset + false + pdbonly + true + + + + + + + + + + + + + + + + true + \ + + + + + + + + + + + + + + + + + diff --git a/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx b/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx index dbf14e8..993ef7f 100644 --- a/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx +++ b/Source/EWSPDIWinForms/HolidayPropertiesDlg.resx @@ -123,10 +123,10 @@ - 12, 261 + 16, 331 - 88, 32 + 117, 40 @@ -151,10 +151,10 @@ NoControl - 358, 261 + 477, 331 - 88, 32 + 118, 40 16 @@ -178,10 +178,10 @@ NoControl - 8, 16 + 11, 20 - 90, 23 + 120, 29 0 @@ -205,10 +205,10 @@ 13 - 104, 16 + 139, 20 - 328, 22 + 437, 26 1 @@ -229,10 +229,10 @@ NoControl - 40, 48 + 53, 61 - 58, 23 + 78, 29 2 @@ -259,10 +259,10 @@ NoControl - 19, 95 + 25, 120 - 146, 24 + 195, 31 4 @@ -286,10 +286,10 @@ NoControl - 19, 190 + 25, 241 - 134, 24 + 179, 30 5 @@ -313,10 +313,10 @@ NoControl - 159, 191 + 212, 242 - 106, 23 + 141, 29 12 @@ -343,10 +343,10 @@ NoControl - 209, 159 + 279, 201 - 56, 23 + 74, 30 10 @@ -370,16 +370,16 @@ 9 - 16 + 20 - 271, 96 + 361, 122 12 - 80, 24 + 107, 28 7 @@ -400,10 +400,10 @@ NoControl - 171, 96 + 228, 122 - 94, 23 + 125, 29 6 @@ -430,10 +430,10 @@ NoControl - 143, 128 + 191, 162 - 122, 23 + 162, 29 8 @@ -457,16 +457,16 @@ 4 - 16 + 20 - 271, 128 + 361, 162 12 - 120, 24 + 160, 28 9 @@ -484,16 +484,16 @@ 5 - 16 + 20 - 104, 48 + 139, 61 12 - 104, 24 + 138, 28 3 @@ -517,16 +517,16 @@ True - 6, 15 + 8, 19 - 458, 305 + 610, 389 - 271, 192 + 361, 243 - 48, 22 + 64, 26 13 @@ -547,10 +547,10 @@ 0 - 271, 160 + 361, 203 - 48, 22 + 64, 26 11 @@ -574,10 +574,10 @@ NoControl - 175, 224 + 233, 284 - 264, 24 + 352, 30 14 diff --git a/Source/EWSPDIWinForms/PDIWinForms.Designer.cs b/Source/EWSPDIWinForms/PDIWinForms.Designer.cs index 28a4b85..1032fe6 100644 --- a/Source/EWSPDIWinForms/PDIWinForms.Designer.cs +++ b/Source/EWSPDIWinForms/PDIWinForms.Designer.cs @@ -1,7 +1,7 @@ //------------------------------------------------------------------------------ // // This code was generated by a tool. -// Runtime Version:4.0.30319.34209 +// Runtime Version:4.0.30319.42000 // // Changes to this file may cause incorrect behavior and will be lost if // the code is regenerated. @@ -19,7 +19,7 @@ namespace EWSoftware.PDI.Windows.Forms { // class via a tool like ResGen or Visual Studio. // To add or remove a member, edit your .ResX file then rerun ResGen // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] internal class PDIWinForms { diff --git a/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs b/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs index 7bbf6d9..7ad490a 100644 --- a/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs +++ b/Source/EWSPDIWinForms/Properties/AssemblyInfo.cs @@ -2,8 +2,8 @@ // System : EWSoftware.PDI Windows Forms Controls // File : AssemblyInfo.cs // Author : Eric Woodruff (Eric@EWoodruff.us) -// Updated : 10/14/2014 -// Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +// Updated : 11/18/2018 +// Note : Copyright 2004-2018, Eric Woodruff, All rights reserved // Compiler: Microsoft Visual C# // // Windows forms controls that are used in conjunction with the EWSoftware.PDI classes @@ -22,7 +22,5 @@ // General assembly information [assembly: AssemblyTitle("EWSoftware.PDI Windows Forms Controls")] -[assembly: AssemblyDescription("Windows Forms controls that are used in conjunction with the " + - "EWSoftware.PDI classes")] // See AssemblyInfoShared.cs for the shared attributes common to all projects in the solution diff --git a/Source/EWSPDIWinForms/Properties/Resources.Designer.cs b/Source/EWSPDIWinForms/Properties/Resources.Designer.cs deleted file mode 100644 index 2ebe7f0..0000000 --- a/Source/EWSPDIWinForms/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.34209 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace EWSoftware.PDI.Windows.Forms.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("EWSoftware.PDI.Windows.Forms.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/Source/EWSPDIWinForms/Properties/Resources.resx b/Source/EWSPDIWinForms/Properties/Resources.resx deleted file mode 100644 index 1af7de1..0000000 --- a/Source/EWSPDIWinForms/Properties/Resources.resx +++ /dev/null @@ -1,120 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/NuGet/ReadMe_PDIWinForms.txt b/Source/EWSPDIWinForms/ReadMe.txt similarity index 100% rename from NuGet/ReadMe_PDIWinForms.txt rename to Source/EWSPDIWinForms/ReadMe.txt diff --git a/Source/EWSPDIWinForms/YearlyPattern.cs b/Source/EWSPDIWinForms/YearlyPattern.cs index 01b4392..4942854 100644 --- a/Source/EWSPDIWinForms/YearlyPattern.cs +++ b/Source/EWSPDIWinForms/YearlyPattern.cs @@ -21,7 +21,6 @@ using System; using System.ComponentModel; -using System.Globalization; using System.Windows.Forms; namespace EWSoftware.PDI.Windows.Forms diff --git a/Source/PDIWebDemo.sln b/Source/PDIWebDemo.sln index 01d7a81..ea943f6 100644 --- a/Source/PDIWebDemo.sln +++ b/Source/PDIWebDemo.sln @@ -4,18 +4,18 @@ VisualStudioVersion = 15.0.27004.2002 MinimumVisualStudioVersion = 10.0.40219.1 Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PDIWebDemoCS", "CSharpDemos\PDIWebDemoCS\", "{60252946-B338-4A43-B49A-350776966EAB}" ProjectSection(WebsiteProperties) = preProject - TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0" - ProjectReferences = "{23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}|EWSoftware.PDI.dll;{13eb4641-36a6-4c9c-af8c-29f3763d392f}|EWSoftware.PDI.Data.dll;{7aac8160-1975-47a2-a171-4c335e5a6c8c}|EWSoftware.PDI.Web.Controls.dll;" + TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.7.2" + ProjectReferences = "{a7923036-e253-4b09-ae6c-fd409281d0c9}|EWSoftware.PDI.Web.Controls.dll;" Debug.AspNetCompiler.VirtualPath = "/PDIWebDemoCS" Debug.AspNetCompiler.PhysicalPath = "CSharpDemos\PDIWebDemoCS\" - Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoCS\" + Debug.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoCS\" Debug.AspNetCompiler.Updateable = "false" Debug.AspNetCompiler.ForceOverwrite = "true" Debug.AspNetCompiler.FixedNames = "false" Debug.AspNetCompiler.Debug = "True" Release.AspNetCompiler.VirtualPath = "/PDIWebDemoCS" Release.AspNetCompiler.PhysicalPath = "CSharpDemos\PDIWebDemoCS\" - Release.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoCS\" + Release.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoCS\" Release.AspNetCompiler.Updateable = "false" Release.AspNetCompiler.ForceOverwrite = "true" Release.AspNetCompiler.FixedNames = "false" @@ -26,18 +26,18 @@ Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PDIWebDemoCS", "CSharpDemos EndProject Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "PDIWebDemoVB", "VBNetDemos\PDIWebDemoVB\", "{6EE94951-05F3-4B9B-9595-890681E2DD0B}" ProjectSection(WebsiteProperties) = preProject - TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0" - ProjectReferences = "{23b6c08d-3cde-4f0b-a3b5-a3831adeb79f}|EWSoftware.PDI.dll;{13eb4641-36a6-4c9c-af8c-29f3763d392f}|EWSoftware.PDI.Data.dll;{7aac8160-1975-47a2-a171-4c335e5a6c8c}|EWSoftware.PDI.Web.Controls.dll;" + TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.7.2" + ProjectReferences = "{a7923036-e253-4b09-ae6c-fd409281d0c9}|EWSoftware.PDI.Web.Controls.dll;" Debug.AspNetCompiler.VirtualPath = "/PDIWebDemoVB" Debug.AspNetCompiler.PhysicalPath = "VBNetDemos\PDIWebDemoVB\" - Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoVB\" + Debug.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoVB\" Debug.AspNetCompiler.Updateable = "false" Debug.AspNetCompiler.ForceOverwrite = "true" Debug.AspNetCompiler.FixedNames = "false" Debug.AspNetCompiler.Debug = "True" Release.AspNetCompiler.VirtualPath = "/PDIWebDemoVB" Release.AspNetCompiler.PhysicalPath = "VBNetDemos\PDIWebDemoVB\" - Release.AspNetCompiler.TargetPath = "PrecompiledWeb\PDIWebDemoVB\" + Release.AspNetCompiler.TargetPath = "..\Deployment\PrecompiledWeb\PDIWebDemoVB\" Release.AspNetCompiler.Updateable = "false" Release.AspNetCompiler.ForceOverwrite = "true" Release.AspNetCompiler.FixedNames = "false" @@ -53,15 +53,15 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{760BE6 EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3A883170-D3A8-4356-A405-1755B7DA5E4F}" ProjectSection(SolutionItems) = preProject - ..\Source\.editorconfig = ..\Source\.editorconfig + .editorconfig = .editorconfig PDIWebDemo.sln.vsspell = PDIWebDemo.sln.vsspell EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDI", "EWSPDI\EWSPDI.csproj", "{23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI", "EWSPDI\EWSoftware.PDI.csproj", "{1A26024A-D3A3-4F39-AC16-13467866E54E}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIData", "EWSPDIData\EWSPDIData.csproj", "{13EB4641-36A6-4C9C-AF8C-29F3763D392F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Data", "EWSPDIData\EWSoftware.PDI.Data.csproj", "{2FAECA0E-F4C1-4323-9698-D23874396293}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWeb", "EWSPDIWeb\EWSPDIWeb.csproj", "{7AAC8160-1975-47A2-A171-4C335E5A6C8C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Web.Controls", "EWSPDIWeb\EWSoftware.PDI.Web.Controls.csproj", "{A7923036-E253-4B09-AE6C-FD409281D0C9}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -83,30 +83,30 @@ Global {6EE94951-05F3-4B9B-9595-890681E2DD0B}.Release|.NET.ActiveCfg = Debug|Any CPU {6EE94951-05F3-4B9B-9595-890681E2DD0B}.Release|Any CPU.ActiveCfg = Debug|Any CPU {6EE94951-05F3-4B9B-9595-890681E2DD0B}.Release|Any CPU.Build.0 = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|.NET.ActiveCfg = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|.NET.Build.0 = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|.NET.ActiveCfg = Release|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|.NET.Build.0 = Release|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.Build.0 = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|.NET.ActiveCfg = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|.NET.Build.0 = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|.NET.ActiveCfg = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|.NET.Build.0 = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.Build.0 = Release|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|.NET.ActiveCfg = Debug|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|.NET.Build.0 = Debug|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|.NET.ActiveCfg = Release|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|.NET.Build.0 = Release|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7AAC8160-1975-47A2-A171-4C335E5A6C8C}.Release|Any CPU.Build.0 = Release|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|.NET.ActiveCfg = Debug|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|.NET.Build.0 = Debug|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|.NET.ActiveCfg = Release|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|.NET.Build.0 = Release|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1A26024A-D3A3-4F39-AC16-13467866E54E}.Release|Any CPU.Build.0 = Release|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|.NET.ActiveCfg = Debug|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|.NET.Build.0 = Debug|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|.NET.ActiveCfg = Release|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|.NET.Build.0 = Release|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2FAECA0E-F4C1-4323-9698-D23874396293}.Release|Any CPU.Build.0 = Release|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|.NET.ActiveCfg = Debug|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|.NET.Build.0 = Debug|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|.NET.ActiveCfg = Release|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|.NET.Build.0 = Release|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7923036-E253-4B09-AE6C-FD409281D0C9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/VBNetDemos.sln b/Source/VBNetDemos.sln index feb5afd..5f4a64e 100644 --- a/Source/VBNetDemos.sln +++ b/Source/VBNetDemos.sln @@ -2,12 +2,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.27004.2002 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PDIDatesTest", "VBNetDemos\PDIDatesTest\PDIDatesTest.vbproj", "{CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PDIParserTest", "VBNetDemos\PDIParserTest\PDIParserTest.vbproj", "{8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "RFC2445RecurTest", "VBNetDemos\RFC2445RecurTest\RFC2445RecurTest.vbproj", "{A60B4D1A-216B-4CA7-B078-91F6F27DADE4}" -EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "PDIWinFormsTest", "VBNetDemos\PDIWinFormsTest\PDIWinFormsTest.vbproj", "{32B39562-144C-4272-9251-1FC72D7D4303}" EndProject Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "vCardBrowser", "VBNetDemos\vCardBrowser\vCardBrowser.vbproj", "{DC514DED-802F-4871-A220-661C0E697A54}" @@ -20,16 +14,17 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EWSPDIDemos.ruleset = EWSPDIDemos.ruleset EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDI", "EWSPDI\EWSPDI.csproj", "{23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI", "EWSPDI\EWSoftware.PDI.csproj", "{E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIData", "EWSPDIData\EWSPDIData.csproj", "{13EB4641-36A6-4C9C-AF8C-29F3763D392F}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Data", "EWSPDIData\EWSoftware.PDI.Data.csproj", "{4D1D331E-7475-4260-B9AD-8A31848A6054}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EWSPDIWinForms", "EWSPDIWinForms\EWSPDIWinForms.csproj", "{DBD186A2-8160-4BF3-92D4-61BF262F0CA2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EWSoftware.PDI.Windows.Forms", "EWSPDIWinForms\EWSoftware.PDI.Windows.Forms.csproj", "{1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{6D2E4901-CF16-42A8-ADF7-82663A7B4487}" - ProjectSection(SolutionItems) = preProject - .nuget\NuGet.Config = .nuget\NuGet.Config - EndProjectSection +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "PDIDatesTest", "VBNetDemos\PDIDatesTest\PDIDatesTest.vbproj", "{1810811B-5862-4CD2-BA0E-EE38414EF646}" +EndProject +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "PDIParserTest", "VBNetDemos\PDIParserTest\PDIParserTest.vbproj", "{CE1CDE90-CAD7-44ED-B75C-4344DA98A121}" +EndProject +Project("{778DAE3C-4631-46EA-AA77-85C1314464D9}") = "RFC2445RecurTest", "VBNetDemos\RFC2445RecurTest\RFC2445RecurTest.vbproj", "{DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -37,18 +32,6 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2}.Release|Any CPU.Build.0 = Release|Any CPU - {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B}.Release|Any CPU.Build.0 = Release|Any CPU - {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A60B4D1A-216B-4CA7-B078-91F6F27DADE4}.Release|Any CPU.Build.0 = Release|Any CPU {32B39562-144C-4272-9251-1FC72D7D4303}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {32B39562-144C-4272-9251-1FC72D7D4303}.Debug|Any CPU.Build.0 = Debug|Any CPU {32B39562-144C-4272-9251-1FC72D7D4303}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -61,18 +44,30 @@ Global {45A94A5D-36E8-41CC-A013-88B44A97F5E3}.Debug|Any CPU.Build.0 = Debug|Any CPU {45A94A5D-36E8-41CC-A013-88B44A97F5E3}.Release|Any CPU.ActiveCfg = Release|Any CPU {45A94A5D-36E8-41CC-A013-88B44A97F5E3}.Release|Any CPU.Build.0 = Release|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23B6C08D-3CDE-4F0B-A3B5-A3831ADEB79F}.Release|Any CPU.Build.0 = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13EB4641-36A6-4C9C-AF8C-29F3763D392F}.Release|Any CPU.Build.0 = Release|Any CPU - {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DBD186A2-8160-4BF3-92D4-61BF262F0CA2}.Release|Any CPU.Build.0 = Release|Any CPU + {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4BE35A2-31C3-4BE1-A257-413FB78CDD9B}.Release|Any CPU.Build.0 = Release|Any CPU + {4D1D331E-7475-4260-B9AD-8A31848A6054}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4D1D331E-7475-4260-B9AD-8A31848A6054}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4D1D331E-7475-4260-B9AD-8A31848A6054}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4D1D331E-7475-4260-B9AD-8A31848A6054}.Release|Any CPU.Build.0 = Release|Any CPU + {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E7AAF3E-6978-4C69-A2FB-916AF6F77D9E}.Release|Any CPU.Build.0 = Release|Any CPU + {1810811B-5862-4CD2-BA0E-EE38414EF646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1810811B-5862-4CD2-BA0E-EE38414EF646}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1810811B-5862-4CD2-BA0E-EE38414EF646}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1810811B-5862-4CD2-BA0E-EE38414EF646}.Release|Any CPU.Build.0 = Release|Any CPU + {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE1CDE90-CAD7-44ED-B75C-4344DA98A121}.Release|Any CPU.Build.0 = Release|Any CPU + {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF0E03E4-C850-4BEB-B2CC-C7EF9BEC59B8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb b/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb index cd2d448..3b2d45a 100644 --- a/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb +++ b/Source/VBNetDemos/CalendarBrowser/AlarmControl.vb @@ -124,13 +124,13 @@ Public Partial Class AlarmControl End If If (a.Action.Action = AlarmAction.EMail OrElse a.Action.Action = AlarmAction.Display) AndAlso - String.IsNullOrEmpty(a.Description.Value) Then + String.IsNullOrWhiteSpace(a.Description.Value) Then Me.ErrorProvider.SetError(txtDescription, "A description is required") result = False End If If a.Action.Action = AlarmAction.EMail Then - If String.IsNullOrEmpty(a.Summary.Value) Then + If String.IsNullOrWhiteSpace(a.Summary.Value) Then Me.ErrorProvider.SetError(txtSummary, "A summary is required for an e-mail alarm") result = False Else diff --git a/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj b/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj index 16a5d3f..ffac5c8 100644 --- a/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj +++ b/Source/VBNetDemos/CalendarBrowser/CalendarBrowser.vbproj @@ -1,5 +1,5 @@  - + Local 8.0.50727 @@ -22,14 +22,14 @@ On On CalendarBrowser - CalendarBrowser.My.MyApplication + CalendarBrowser.CalendarBrowserForm - WindowsForms + WindowsFormsWithCustomSubMain 3.5 - v4.0 + v4.7.2 publish\ true @@ -67,6 +67,7 @@ 42016,42017,42018,42019,42032,42353,42354,42355 full ..\..\EWSPDIDemos.ruleset + false bin\ @@ -87,10 +88,14 @@ 1 42016,42017,42018,42019,42032,42353,42354,42355 none + false true + + app.manifest + System @@ -265,6 +270,7 @@ + @@ -285,17 +291,17 @@ - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData + + {4d1d331e-7475-4260-b9ad-8a31848a6054} + EWSoftware.PDI.Data - - {dbd186a2-8160-4bf3-92d4-61bf262f0ca2} - EWSPDIWinForms + + {1e7aaf3e-6978-4c69-a2fb-916af6f77d9e} + EWSoftware.PDI.Windows.Forms - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI + + {e4be35a2-31c3-4be1-a257-413fb78cdd9b} + EWSoftware.PDI diff --git a/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb b/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb index f935678..c07223c 100644 --- a/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb +++ b/Source/VBNetDemos/CalendarBrowser/CalendarBrowserForm.vb @@ -47,6 +47,15 @@ Public Partial Class CalendarBrowserForm ''' ''' The main entry point for the application ''' + Shared Sub Main(Args As String()) + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(false) + Application.Run(new CalendarBrowserForm()) + End Sub + + ''' + ''' Constructor + ''' Public Sub New() MyBase.New() diff --git a/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb b/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb index dec92a4..88dd01c 100644 --- a/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb +++ b/Source/VBNetDemos/CalendarBrowser/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -11,28 +11,3 @@ Option Strict On Option Explicit On - -Namespace My - - 'NOTE: This file is auto-generated; do not modify it directly. To make changes, - ' or if you encounter build errors in this file, go to the Project Designer - ' (go to Project Properties or double-click the My Project node in - ' Solution Explorer), and make changes on the Application tab. - ' - Partial Friend Class MyApplication - - _ - Public Sub New() - MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) - Me.IsSingleInstance = false - Me.EnableVisualStyles = true - Me.SaveMySettingsOnExit = false - Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses - End Sub - - _ - Protected Overrides Sub OnCreateMainForm() - Me.MainForm = Global.CalendarBrowser.CalendarBrowserForm - End Sub - End Class -End Namespace diff --git a/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp b/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp index e7dd583..c8f32b8 100644 --- a/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp +++ b/Source/VBNetDemos/CalendarBrowser/My Project/Application.myapp @@ -1,6 +1,6 @@ - true + false CalendarBrowserForm false 0 diff --git a/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb b/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb index a128868..889ded6 100644 --- a/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb +++ b/Source/VBNetDemos/CalendarBrowser/My Project/AssemblyInfoShared.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : AssemblyInfo.cs ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 01/19/2015 -' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved +' Updated : 11/20/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' ' PDI library demos common assembly attributes @@ -27,7 +27,7 @@ Imports System.Runtime.InteropServices ' General assembly information - + #If DEBUG @@ -51,5 +51,5 @@ Imports System.Runtime.InteropServices ' Day of release ' Revision (typically zero unless multiple releases are made on the same day) ' - - + + diff --git a/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb b/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb index 590b27e..8ba50ab 100644 --- a/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb +++ b/Source/VBNetDemos/CalendarBrowser/RequestStatusControl.vb @@ -80,7 +80,7 @@ Public Partial Class RequestStatusControl RequestStatusPropertyCollection) For Each status As RequestStatusProperty In requests - If String.IsNullOrEmpty(status.StatusMessage) Then + If String.IsNullOrWhiteSpace(status.StatusMessage) Then Me.BindingSource.Position = requests.IndexOf(status) txtMessage.Focus() txtMessage_Validating(txtMessage, New CancelEventArgs()) diff --git a/Source/VBNetDemos/CalendarBrowser/app.config b/Source/VBNetDemos/CalendarBrowser/app.config index 793777f..9659fad 100644 --- a/Source/VBNetDemos/CalendarBrowser/app.config +++ b/Source/VBNetDemos/CalendarBrowser/app.config @@ -21,6 +21,9 @@ - + + + + diff --git a/Source/VBNetDemos/CalendarBrowser/app.manifest b/Source/VBNetDemos/CalendarBrowser/app.manifest new file mode 100644 index 0000000..5dbcd41 --- /dev/null +++ b/Source/VBNetDemos/CalendarBrowser/app.manifest @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb b/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb index b171d17..5e0097f 100644 --- a/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb +++ b/Source/VBNetDemos/PDIDatesTest/My Project/AssemblyInfo.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : AssemblyInfo.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 01/01/2015 -' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved +' Updated : 11/20/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' ' Assembly information for the demo application. diff --git a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb index 90c318e..115a548 100644 --- a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb +++ b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vb @@ -2,7 +2,7 @@ ' System : EWSoftware PDI Demonstration Applications ' File : PDIDatesTest.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 11/15/2018 +' Updated : 11/20/2018 ' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' @@ -19,10 +19,7 @@ ' 12/01/2004 EFW Created the code '================================================================================================================ -Imports System.Collections.Generic Imports System.IO -Imports System.Linq -Imports System.Runtime.Serialization.Formatters.Soap Imports System.Runtime.Serialization.Formatters.Binary Imports System.Xml.Serialization @@ -39,42 +36,44 @@ Module PDIDatesTest Dim recurDates As DateTimeCollection Dim yearFrom, yearTo, idx As Integer - If args.GetUpperBound(0) < 1 Then - Console.WriteLine("Specify a starting and ending year") - Return + If args.Length <> 2 Then + Console.WriteLine("Using current year +/- 4 years for testing" + Environment.NewLine) + + yearFrom = DateTime.Today.Year - 4 + yearTo = yearFrom + 8 + Else + Try + yearFrom = Convert.ToInt32(args(0)) + yearTo = Convert.ToInt32(args(1)) + + If yearFrom < 1 Then yearFrom = 1 + If yearFrom > 9999 Then yearFrom = 9999 + If yearTo < 1 Then yearTo = 1 + If yearTo > 9999 Then yearTo = 9999 + + If yearFrom > yearTo Then + idx = yearFrom + yearFrom = yearTo + yearTo = idx + End If + Catch + Console.WriteLine("Invalid year specified on command line") + Return + End Try End If - Try - yearFrom = Convert.ToInt32(args(0)) - yearTo = Convert.ToInt32(args(1)) - - If yearFrom < 1 Then yearFrom = 1 - If yearFrom > 9999 Then yearFrom = 9999 - If yearTo < 1 Then yearTo = 1 - If yearTo > 9999 Then yearTo = 9999 - - If yearFrom > yearTo Then - idx = yearFrom - yearFrom = yearTo - yearTo = idx - End If - Catch - Console.WriteLine("Invalid year specified on command line") - Return - End Try - ' Test DateUtils.CalculateOccurrenceDate - Console.WriteLine("Fourth weekday in January 2004: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0)) + Console.WriteLine("Fourth weekday in January 2018: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 0)) - Console.WriteLine("Fourth weekday in January 2004 + 2: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2)) + Console.WriteLine("Fourth weekday in January 2018 + 2: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Fourth, DaysOfWeek.Weekdays, 2)) - Console.WriteLine("Last weekend day in January 2004: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0)) + Console.WriteLine("Last weekend day in January 2018: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 0)) - Console.WriteLine("Last weekend day in January 2004 + 2: {0:d}", - DateUtils.CalculateOccurrenceDate(2004, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2)) + Console.WriteLine("Last weekend day in January 2018 + 2: {0:d}", + DateUtils.CalculateOccurrenceDate(2018, 1, DayOccurrence.Last, DaysOfWeek.Weekends, 2)) ' Pause to review output Console.WriteLine("Press ENTER to continue") @@ -87,7 +86,7 @@ Module PDIDatesTest Console.WriteLine("Week start = Monday") Dim dow As DayOfWeek = DayOfWeek.Monday - For year = 1998 To 2009 + For year = yearFrom To yearTo For idx = 1 To 53 If idx <> 53 Or DateUtils.WeeksInYear(year, dow) = 53 Then weekFrom = DateUtils.DateFromWeek(year, idx, dow, 0) @@ -149,51 +148,51 @@ Module PDIDatesTest ' Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone Console.WriteLine("Expressed in Universal Time") - Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", False)) - Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", False)) - Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", False)) - Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", False)) - Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.123", False)) - Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.98Z", False)) - Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", False)) - Console.WriteLine("20040314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20040314T102531.123+0830", False)) - - Console.WriteLine("{0}2004-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2004-03-14", False)) - Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", False)) - Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", False)) - Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", False)) - Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.123", False)) - Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", False)) - Console.WriteLine("2004-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31-04", False)) - Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", False)) + Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", False)) + Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", False)) + Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", False)) + Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", False)) + Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.123", False)) + Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.98Z", False)) + Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", False)) + Console.WriteLine("20180314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20180314T102531.123+0830", False)) + + Console.WriteLine("{0}2018-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2018-03-14", False)) + Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", False)) + Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", False)) + Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", False)) + Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.123", False)) + Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", False)) + Console.WriteLine("2018-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31-04", False)) + Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", False)) ' Test DateUtils.FromISO8601String and DateUtils.FromISO8601TimeZone Console.WriteLine("{0}Expressed in Local Time", Environment.NewLine) - Console.WriteLine("20040314 = {0}", DateUtils.FromISO8601String("20040314", True)) - Console.WriteLine("20040314T10 = {0}", DateUtils.FromISO8601String("20040314T10", True)) - Console.WriteLine("20040314T1025 = {0}", DateUtils.FromISO8601String("20040314T1025", True)) - Console.WriteLine("20040314T102531 = {0}", DateUtils.FromISO8601String("20040314T102531", True)) - Console.WriteLine("20040314T102531.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.123", True)) - Console.WriteLine("20040314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("20040314T102531.98Z", True)) - Console.WriteLine("20040314T102531-04 = {0}", DateUtils.FromISO8601String("20040314T102531-04", True)) - Console.WriteLine("20040314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20040314T102531.123+0830", True)) - - Console.WriteLine("{0}2004-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2004-03-14", True)) - Console.WriteLine("2004-03-14T10 = {0}", DateUtils.FromISO8601String("2004-03-14T10", True)) - Console.WriteLine("2004-03-14T10:25 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25", True)) - Console.WriteLine("2004-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31", True)) - Console.WriteLine("2004-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.123", True)) - Console.WriteLine("2004-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", - DateUtils.FromISO8601String("2004-03-14T10:25:31.98Z", True)) - Console.WriteLine("2004-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31-04", True)) - Console.WriteLine("2004-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2004-03-14T10:25:31+08:30", True)) + Console.WriteLine("20180314 = {0}", DateUtils.FromISO8601String("20180314", True)) + Console.WriteLine("20180314T10 = {0}", DateUtils.FromISO8601String("20180314T10", True)) + Console.WriteLine("20180314T1025 = {0}", DateUtils.FromISO8601String("20180314T1025", True)) + Console.WriteLine("20180314T102531 = {0}", DateUtils.FromISO8601String("20180314T102531", True)) + Console.WriteLine("20180314T102531.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.123", True)) + Console.WriteLine("20180314T102531.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("20180314T102531.98Z", True)) + Console.WriteLine("20180314T102531-04 = {0}", DateUtils.FromISO8601String("20180314T102531-04", True)) + Console.WriteLine("20180314T102531.123+0830 = {0}", DateUtils.FromISO8601String("20180314T102531.123+0830", True)) + + Console.WriteLine("{0}2018-03-14 = {1}", Environment.NewLine, DateUtils.FromISO8601String("2018-03-14", True)) + Console.WriteLine("2018-03-14T10 = {0}", DateUtils.FromISO8601String("2018-03-14T10", True)) + Console.WriteLine("2018-03-14T10:25 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25", True)) + Console.WriteLine("2018-03-14T10:25:31 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31", True)) + Console.WriteLine("2018-03-14T10:25:31.123 = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.123", True)) + Console.WriteLine("2018-03-14T10:25:31.98Z = {0:d} {0:HH:mm:ss.fff}", + DateUtils.FromISO8601String("2018-03-14T10:25:31.98Z", True)) + Console.WriteLine("2018-03-14T10:25:31-04 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31-04", True)) + Console.WriteLine("2018-03-14T10:25:31+08:30 = {0}", DateUtils.FromISO8601String("2018-03-14T10:25:31+08:30", True)) Dim ts As TimeSpan = DateUtils.FromISO8601TimeZone("+08") Console.WriteLine("{0}+08 = {1} hours {2} minutes", Environment.NewLine, ts.Hours, ts.Minutes) @@ -460,16 +459,17 @@ Module PDIDatesTest xs.Serialize(fs, holidays) Console.WriteLine("Holidays saved to Holidays.xml") End Using - +#If NETFramework + ' The SOAP formatter is only supported on the full .NET Framework ' SOAP Using fs As New FileStream("Holidays.soap", FileMode.Create) - Dim sf As New SoapFormatter() + Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter() ' SOAP doesn't support generics directly so use an array sf.Serialize(fs, holidays.ToArray()) Console.WriteLine("Holidays saved to Holidays.soap") End Using - +#End If ' Binary Using fs As New FileStream("Holidays.bin", FileMode.Create) Dim bf As New BinaryFormatter() @@ -500,17 +500,17 @@ Module PDIDatesTest holidays = DirectCast(xs.Deserialize(fs), HolidayCollection) Console.WriteLine("Holidays retrieved from Holidays.xml") End Using - +#If NETFramework ' SOAP Using fs As New FileStream("Holidays.soap", FileMode.Open) - Dim sf As New SoapFormatter() + Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter() ' As noted, SOAP doesn't support generics to an array is used instead holidays = New HolidayCollection(DirectCast(sf.Deserialize(fs), Holiday())) Console.WriteLine("Holidays retrieved from Holidays.soap") End Using - +#End If ' Binary Using fs As New FileStream("Holidays.bin", FileMode.Open) Dim bf As New BinaryFormatter() @@ -609,14 +609,14 @@ Module PDIDatesTest xs.Serialize(fs, rRecur) Console.WriteLine("Recurrence saved to Recurrence.xml") End Using - +#If NETFramework ' SOAP Using fs As New FileStream("Recurrence.soap", FileMode.Create) - Dim sf As New SoapFormatter() + Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter() sf.Serialize(fs, rRecur) Console.WriteLine("Recurrence saved to Recurrence.soap") End Using - +#End If ' Binary Using fs As New FileStream("Recurrence.bin", FileMode.Create) Dim bf As New BinaryFormatter() @@ -647,14 +647,14 @@ Module PDIDatesTest rRecur = DirectCast(xs.Deserialize(fs), Recurrence) Console.WriteLine("Recurrence restored from Recurrence.xml") End Using - +#If NETFramework ' SOAP Using fs As New FileStream("Recurrence.soap", FileMode.Open) - Dim sf As New SoapFormatter() + Dim sf As New System.Runtime.Serialization.Formatters.Soap.SoapFormatter() rRecur = DirectCast(sf.Deserialize(fs), Recurrence) Console.WriteLine("Recurrence retrieved from Recurrence.soap") End Using - +#End If ' Binary Using fs As New FileStream("Recurrence.bin", FileMode.Open) Dim bf As New BinaryFormatter() diff --git a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj index 4bd5369..23f4ef1 100644 --- a/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj +++ b/Source/VBNetDemos/PDIDatesTest/PDIDatesTest.vbproj @@ -1,159 +1,27 @@ - - + + - Local - 8.0.50727 - 2.0 - {CAC384EA-8A67-4A81-9B65-7C8FAC77CDD2} - Debug - AnyCPU - - - - - PDIDatesTest - PDIDatesTest.snk - None - JScript - Grid - IE50 - false Exe - Binary - On - On - PDIDatesTest - PDIDatesTest.PDIDatesTest - - - Console - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\ - - - 285212672 - - - - - true - true - true - false - false - false - false - 1 - 42016,42017,42018,42019,42032,42353,42354,42355 - full - ..\..\EWSPDIDemos.ruleset - - - bin\ - - - 285212672 - - - - - false - true - false - true - false - false - false - 1 - 42016,42017,42018,42019,42032,42353,42354,42355 - none - - + netcoreapp2.1 + False + False + False + False + False + False + ProductAttribute + PDIDatesTest.snk true + ..\..\EWSPDIDemos.ruleset + false + - - System - - - System.Runtime.Serialization.Formatters.Soap - - - System.XML - - - - - + + - - My Project\AssemblyInfoShared.vb - - - - Code - - - Code - + - - - - - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - - - - - \ No newline at end of file + + diff --git a/Source/VBNetDemos/PDIDatesTest/app.config b/Source/VBNetDemos/PDIDatesTest/app.config deleted file mode 100644 index 793777f..0000000 --- a/Source/VBNetDemos/PDIDatesTest/app.config +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb b/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb index 19c04ff..eafec44 100644 --- a/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb +++ b/Source/VBNetDemos/PDIParserTest/My Project/AssemblyInfo.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : AssemblyInfo.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 01/01/2015 -' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved +' Updated : 11/20/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' ' Assembly information for the demo application diff --git a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb index cb9dccd..e2efa02 100644 --- a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb +++ b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : PDIParserTest.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 01/01/2015 -' Note : Copyright 2003-2015, Eric Woodruff, All rights reserved +' Updated : 11/20/2018 +' Note : Copyright 2003-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' ' This is just a quick test of the PDI vCard and calendar parser classes in a console mode application @@ -19,6 +19,8 @@ ' 08/19/2007 EFW Added support for vNote object '================================================================================================================ +' Ignore Spelling: iso + Imports System.IO Imports System.Text @@ -35,10 +37,9 @@ Module PDIParserTest Sub Main(args As String()) Dim outputFolder, outputFile, file As String - If args.GetUpperBound(0) < 1 Then - Console.WriteLine("Specify a folder name containing PDI files and a different one for the " & - "output files.") - Return + If args.Length < 2 Then + Console.WriteLine("Using files from .\PDIFiles for the test" + Environment.NewLine) + args = New String(1) { "..\..\..\..\..\..\PDIFiles", "..\..\..\..\..\..\PDIFiles_Copy" } End If Try diff --git a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj index c4af909..ce43ba2 100644 --- a/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj +++ b/Source/VBNetDemos/PDIParserTest/PDIParserTest.vbproj @@ -1,156 +1,28 @@ - - + + - Local - 8.0.50727 - 2.0 - {8DE797C8-0D9D-402F-9B3B-55CB3EF3E97B} - Debug - AnyCPU - - - - - PDIParserTest - PDIParserTest.snk - None - JScript - Grid - IE50 - false Exe - Binary - On - On - PDIParserTest - PDIParserTest.PDIParserTest - - - Console - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\ - - - 285212672 - - - - - true - true - true - false - false - false - false - 1 - 42016,42017,42018,42019,42032,42353,42354,42355 - full - ..\..\EWSPDIDemos.ruleset - - - bin\ - - - 285212672 - - - - - false - true - false - true - false - false - false - 1 - 42016,42017,42018,42019,42032,42353,42354,42355 - none - - + netcoreapp2.1 + False + False + False + False + False + False + ProductAttribute + PDIParserTest.snk true + ..\..\EWSPDIDemos.ruleset + false + - - System - - - - - + + - - My Project\AssemblyInfoShared.vb - - - Code - - - Code - + + - - - - - - - - - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData - - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - - - - - \ No newline at end of file + + diff --git a/Source/VBNetDemos/PDIParserTest/app.config b/Source/VBNetDemos/PDIParserTest/app.config deleted file mode 100644 index 793777f..0000000 --- a/Source/VBNetDemos/PDIParserTest/app.config +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb b/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb index c5235ae..e79bd5e 100644 --- a/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb +++ b/Source/VBNetDemos/PDIWebDemoVB/App_Code/Global.asax.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : Global.asax.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 12/30/2014 -' Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +' Updated : 11/21/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Microsoft VB.NET ' ' At application start up, a common set of time zones is loaded into the VCalendar.TimeZones collection and a @@ -44,7 +44,7 @@ Namespace PDIWebDemoVB ' multiple sessions may try to access it at the same time. The parser will acquire a write lock ' if it needs to merge a time zone component but since we are loading many time zones at once, ' we'll lock it now. - VCalendar.TimeZones.Lock.AcquireWriterLock(250) + VCalendar.TimeZones.AcquireWriterLock(250) Try ' If still zero, load the file @@ -55,7 +55,7 @@ Namespace PDIWebDemoVB End If Finally - VCalendar.TimeZones.Lock.ReleaseWriterLock() + VCalendar.TimeZones.ReleaseWriterLock() End Try End If diff --git a/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb b/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb index 4ee8631..e9726fc 100644 --- a/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb +++ b/Source/VBNetDemos/PDIWebDemoVB/EventRecurTestForm.aspx.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : EventRecurTestForm.aspx.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 12/31/2014 -' Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +' Updated : 11/21/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Microsoft VB.NET ' ' This page is used to demonstrate recurrence with the calendar components @@ -45,7 +45,7 @@ Namespace PDIWebDemoVB ' The time zone information is loaded in the Application_Start event in Global.asax. We'll ' acquire a reader lock on the time zone collection as it's possible other sessions could be ' parsing calendars with time zone data that could change the collection. - VCalendar.TimeZones.Lock.AcquireReaderLock(250) + VCalendar.TimeZones.AcquireReaderLock(250) Try cboTimeZone.Items.Add("No time zone") @@ -55,7 +55,7 @@ Namespace PDIWebDemoVB Next Finally - VCalendar.TimeZones.Lock.ReleaseReaderLock() + VCalendar.TimeZones.ReleaseReaderLock() End Try ' Set up some defaults for testing diff --git a/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics b/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics index 642a946..814850c 100644 --- a/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics +++ b/Source/VBNetDemos/PDIWebDemoVB/TimeZoneDB.ics @@ -2,12 +2,21 @@ BEGIN:VCALENDAR VERSION:2.0 PRODID:-//EWSoftware//PDI Class Library//EN BEGIN:VTIMEZONE -TZID:(UTC) Casablanca +TZID:(UTC) Coordinated Universal Time +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0000 +TZOFFSETTO:+0000 +TZNAME:Coordinated Universal Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+00:00) Casablanca BEGIN:STANDARD DTSTART:19701025T030000 TZOFFSETFROM:+0100 TZOFFSETTO:+0000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=4SU +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Morocco Standard Time END:STANDARD BEGIN:DAYLIGHT @@ -19,16 +28,7 @@ TZNAME:Morocco Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC) Coordinated Universal Time -BEGIN:STANDARD -DTSTART:19700101T000000 -TZOFFSETFROM:+0000 -TZOFFSETTO:+0000 -TZNAME:Coordinated Universal Time -END:STANDARD -END:VTIMEZONE -BEGIN:VTIMEZONE -TZID:(UTC) Dublin\, Edinburgh\, Lisbon\, London +TZID:(UTC+00:00) Dublin\, Edinburgh\, Lisbon\, London BEGIN:STANDARD DTSTART:19701025T020000 TZOFFSETFROM:+0100 @@ -45,7 +45,7 @@ TZNAME:GMT Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC) Monrovia\, Reykjavik +TZID:(UTC+00:00) Monrovia\, Reykjavik BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+0100 @@ -105,6 +105,23 @@ TZNAME:Romance Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+01:00) Sao Tome +BEGIN:STANDARD +DTSTART:19700105T010000 +TZOFFSETFROM:+0000 +TZOFFSETTO:+0100 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:Sao Tome Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700105T000000 +TZOFFSETFROM:+0100 +TZOFFSETTO:+0000 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:Sao Tome Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+01:00) Sarajevo\, Skopje\, Warsaw\, Zagreb BEGIN:STANDARD DTSTART:19701025T030000 @@ -131,23 +148,6 @@ TZNAME:W. Central Africa Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+01:00) Windhoek -BEGIN:STANDARD -DTSTART:19700405T020000 -TZOFFSETFROM:+0200 -TZOFFSETTO:+0100 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU -TZNAME:Namibia Standard Time -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700906T020000 -TZOFFSETFROM:+0100 -TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SU -TZNAME:Namibia Daylight Time -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE TZID:(UTC+02:00) Amman BEGIN:STANDARD DTSTART:19701030T010000 @@ -194,25 +194,34 @@ BEGIN:DAYLIGHT DTSTART:19700328T235959 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA TZNAME:Middle East Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+02:00) Cairo BEGIN:STANDARD -DTSTART:19700924T235959 +DTSTART:19700101T000000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1TH TZNAME:Egypt Standard Time END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+02:00) Chisinau +BEGIN:STANDARD +DTSTART:19701025T030000 +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +TZNAME:E. Europe Standard Time +END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700521T235959 +DTSTART:19700329T020000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=3TH -TZNAME:Egypt Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU +TZNAME:E. Europe Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE @@ -225,28 +234,28 @@ RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1TH TZNAME:Syria Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700402T235959 +DTSTART:19700327T000000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1TH +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR TZNAME:Syria Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+02:00) E. Europe +TZID:(UTC+02:00) Gaza\, Hebron BEGIN:STANDARD -DTSTART:19701025T030000 +DTSTART:19701031T010000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:E. Europe Standard Time +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SA +TZNAME:West Bank Gaza Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700329T020000 +DTSTART:19700328T010000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU -TZNAME:E. Europe Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA +TZNAME:West Bank Gaza Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE @@ -276,23 +285,6 @@ TZNAME:FLE Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+02:00) Istanbul -BEGIN:STANDARD -DTSTART:19701025T040000 -TZOFFSETFROM:+0300 -TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Turkey Standard Time -END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700330T030000 -TZOFFSETFROM:+0200 -TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1MO -TZNAME:Turkey Daylight Time -END:DAYLIGHT -END:VTIMEZONE -BEGIN:VTIMEZONE TZID:(UTC+02:00) Jerusalem BEGIN:STANDARD DTSTART:19701025T020000 @@ -305,26 +297,27 @@ BEGIN:DAYLIGHT DTSTART:19700327T020000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1FR +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4FR TZNAME:Jerusalem Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+02:00) Kaliningrad (RTZ 1) +TZID:(UTC+02:00) Kaliningrad BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 1 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0200 -TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 1 Daylight Time -END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+02:00) Khartoum +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:Sudan Standard Time +END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+02:00) Tripoli @@ -336,6 +329,15 @@ TZNAME:Libya Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+02:00) Windhoek +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0300 +TZOFFSETTO:+0200 +TZNAME:Namibia Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+03:00) Baghdad BEGIN:STANDARD DTSTART:19700101T000000 @@ -345,6 +347,15 @@ TZNAME:Arabic Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+03:00) Istanbul +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0400 +TZOFFSETTO:+0300 +TZNAME:Turkey Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+03:00) Kuwait\, Riyadh BEGIN:STANDARD DTSTART:19700101T000000 @@ -363,21 +374,13 @@ TZNAME:Belarus Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd (RTZ 2) +TZID:(UTC+03:00) Moscow\, St. Petersburg\, Volgograd BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0400 TZOFFSETTO:+0300 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 2 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0300 -TZOFFSETTO:+0400 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 2 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+03:00) Nairobi @@ -391,17 +394,17 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+03:30) Tehran BEGIN:STANDARD -DTSTART:19700921T235959 +DTSTART:19700918T235959 TZOFFSETFROM:+0430 TZOFFSETTO:+0330 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3MO +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=3FR TZNAME:Iran Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700321T235959 +DTSTART:19700326T000000 TZOFFSETFROM:+0330 TZOFFSETTO:+0430 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=3SA +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4TH TZNAME:Iran Daylight Time END:DAYLIGHT END:VTIMEZONE @@ -415,24 +418,25 @@ TZNAME:Arabian Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+04:00) Astrakhan\, Ulyanovsk +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:Astrakhan Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+04:00) Baku BEGIN:STANDARD -DTSTART:19701025T050000 +DTSTART:19700101T000000 TZOFFSETFROM:+0500 TZOFFSETTO:+0400 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Azerbaijan Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700329T040000 -TZOFFSETFROM:+0400 -TZOFFSETTO:+0500 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SU -TZNAME:Azerbaijan Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+04:00) Izhevsk\, Samara (RTZ 3) +TZID:(UTC+04:00) Izhevsk\, Samara BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+0500 @@ -450,6 +454,15 @@ TZNAME:Mauritius Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+04:00) Saratov +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0500 +TZOFFSETTO:+0400 +TZNAME:Saratov Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+04:00) Tbilisi BEGIN:STANDARD DTSTART:19700101T000000 @@ -486,21 +499,13 @@ TZNAME:West Asia Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+05:00) Ekaterinburg (RTZ 4) +TZID:(UTC+05:00) Ekaterinburg BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0600 TZOFFSETTO:+0500 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 4 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0500 -TZOFFSETTO:+0600 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 4 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+05:00) Islamabad\, Karachi @@ -557,21 +562,13 @@ TZNAME:Bangladesh Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+06:00) Novosibirsk (RTZ 5) +TZID:(UTC+06:00) Omsk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0700 TZOFFSETTO:+0600 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Russia TZ 5 Standard Time +TZNAME:Omsk Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0600 -TZOFFSETTO:+0700 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 5 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+06:30) Yangon (Rangoon) @@ -592,21 +589,49 @@ TZNAME:SE Asia Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+07:00) Krasnoyarsk (RTZ 6) +TZID:(UTC+07:00) Barnaul\, Gorno-Altaysk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:Altai Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Hovd +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:W. Mongolia Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Krasnoyarsk +BEGIN:STANDARD +DTSTART:19700101T000000 TZOFFSETFROM:+0800 TZOFFSETTO:+0700 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 6 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0700 -TZOFFSETTO:+0800 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 6 Daylight Time -END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Novosibirsk +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:Novosibirsk Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+07:00) Tomsk +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0800 +TZOFFSETTO:+0700 +TZNAME:Tomsk Standard Time +END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+08:00) Beijing\, Chongqing\, Hong Kong\, Urumqi @@ -618,21 +643,13 @@ TZNAME:China Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+08:00) Irkutsk (RTZ 7) +TZID:(UTC+08:00) Irkutsk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+0900 TZOFFSETTO:+0800 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 7 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0800 -TZOFFSETTO:+0900 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 7 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+08:00) Kuala Lumpur\, Singapore @@ -671,6 +688,24 @@ TZNAME:Ulaanbaatar Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+08:45) Eucla +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+0945 +TZOFFSETTO:+0845 +TZNAME:Aus Central W. Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+09:00) Chita +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1000 +TZOFFSETTO:+0900 +TZNAME:Transbaikal Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+09:00) Osaka\, Sapporo\, Tokyo BEGIN:STANDARD DTSTART:19700101T000000 @@ -680,6 +715,23 @@ TZNAME:Tokyo Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+09:00) Pyongyang +BEGIN:STANDARD +DTSTART:19700501T233000 +TZOFFSETFROM:+0830 +TZOFFSETTO:+0900 +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=1FR +TZNAME:North Korea Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700105T000000 +TZOFFSETFROM:+0900 +TZOFFSETTO:+0830 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:North Korea Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+09:00) Seoul BEGIN:STANDARD DTSTART:19700101T000000 @@ -689,21 +741,13 @@ TZNAME:Korea Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+09:00) Yakutsk (RTZ 8) +TZID:(UTC+09:00) Yakutsk BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700101T000000 TZOFFSETFROM:+1000 TZOFFSETTO:+0900 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU TZNAME:Russia TZ 8 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+0900 -TZOFFSETTO:+1000 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 8 Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+09:30) Adelaide @@ -784,41 +828,42 @@ TZNAME:Tasmania Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+10:00) Magadan +TZID:(UTC+10:00) Vladivostok BEGIN:STANDARD -DTSTART:19701025T020000 -TZOFFSETFROM:+1200 +DTSTART:19700101T000000 +TZOFFSETFROM:+1100 TZOFFSETTO:+1000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Magadan Standard Time +TZNAME:Russia TZ 9 Standard Time END:STANDARD -BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+1000 -TZOFFSETTO:+1200 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Magadan Daylight Time -END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+10:00) Vladivostok\, Magadan (RTZ 9) +TZID:(UTC+10:30) Lord Howe Island BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19700405T020000 TZOFFSETFROM:+1100 -TZOFFSETTO:+1000 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU -TZNAME:Russia TZ 9 Standard Time +TZOFFSETTO:+1030 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:Lord Howe Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700107T000000 -TZOFFSETFROM:+1000 +DTSTART:19701004T020000 +TZOFFSETFROM:+1030 TZOFFSETTO:+1100 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1WE -TZNAME:Russia TZ 9 Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU +TZNAME:Lord Howe Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+11:00) Chokurdakh (RTZ 10) +TZID:(UTC+11:00) Bougainville Island +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Bougainville Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+11:00) Chokurdakh BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+1200 @@ -827,6 +872,33 @@ TZNAME:Russia TZ 10 Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+11:00) Magadan +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Magadan Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+11:00) Norfolk Island +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Norfolk Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+11:00) Sakhalin +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1200 +TZOFFSETTO:+1100 +TZNAME:Sakhalin Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+11:00) Solomon Is.\, New Caledonia BEGIN:STANDARD DTSTART:19700101T000000 @@ -836,7 +908,7 @@ TZNAME:Central Pacific Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky (RTZ 11) +TZID:(UTC+12:00) Anadyr\, Petropavlovsk-Kamchatsky BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:+1300 @@ -873,10 +945,10 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+12:00) Fiji BEGIN:STANDARD -DTSTART:19700118T020000 +DTSTART:19700111T030000 TZOFFSETFROM:+1300 TZOFFSETTO:+1200 -RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=3SU +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=2SU TZNAME:Fiji Standard Time END:STANDARD BEGIN:DAYLIGHT @@ -905,6 +977,32 @@ TZNAME:Kamchatka Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC+12:45) Chatham Islands +BEGIN:STANDARD +DTSTART:19700405T034500 +TZOFFSETFROM:+1345 +TZOFFSETTO:+1245 +RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +TZNAME:Chatham Islands Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700927T024500 +TZOFFSETFROM:+1245 +TZOFFSETTO:+1345 +RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU +TZNAME:Chatham Islands Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC+13:00) Coordinated Universal Time+13 +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:+1300 +TZOFFSETTO:+1300 +TZNAME:UTC+13 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC+13:00) Nuku'alofa BEGIN:STANDARD DTSTART:19700101T000000 @@ -916,14 +1014,14 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC+13:00) Samoa BEGIN:STANDARD -DTSTART:19700405T010000 +DTSTART:19700405T040000 TZOFFSETFROM:+1400 TZOFFSETTO:+1300 RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU TZNAME:Samoa Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700927T000000 +DTSTART:19700927T030000 TZOFFSETFROM:+1300 TZOFFSETTO:+1400 RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=-1SU @@ -992,6 +1090,15 @@ TZNAME:Mid-Atlantic Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-03:00) Araguaina +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:Tocantins Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-03:00) Brasilia BEGIN:STANDARD DTSTART:19700221T235959 @@ -1001,29 +1108,29 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA TZNAME:E. South America Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19701017T235959 +DTSTART:19701107T235959 TZOFFSETFROM:-0300 TZOFFSETTO:-0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA TZNAME:E. South America Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-03:00) Buenos Aires +TZID:(UTC-03:00) Cayenne\, Fortaleza BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:-0200 TZOFFSETTO:-0300 -TZNAME:Argentina Standard Time +TZNAME:SA Eastern Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-03:00) Cayenne\, Fortaleza +TZID:(UTC-03:00) City of Buenos Aires BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:-0200 TZOFFSETTO:-0300 -TZNAME:SA Eastern Standard Time +TZNAME:Argentina Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE @@ -1039,25 +1146,43 @@ BEGIN:DAYLIGHT DTSTART:19700328T220000 TZOFFSETFROM:-0300 TZOFFSETTO:-0200 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=-1SA +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=4SA TZNAME:Greenland Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC-03:00) Montevideo BEGIN:STANDARD -DTSTART:19700308T020000 +DTSTART:19700101T000000 TZOFFSETFROM:-0200 TZOFFSETTO:-0300 -RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:Montevideo Standard Time END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-03:00) Punta Arenas +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +TZNAME:Magallanes Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-03:00) Saint Pierre and Miquelon +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0200 +TZOFFSETTO:-0300 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Saint Pierre Standard Time +END:STANDARD BEGIN:DAYLIGHT -DTSTART:19701004T020000 +DTSTART:19700308T020000 TZOFFSETFROM:-0300 TZOFFSETTO:-0200 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=1SU -TZNAME:Montevideo Daylight Time +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Saint Pierre Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE @@ -1121,6 +1246,15 @@ TZNAME:Atlantic Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-04:00) Caracas +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0300 +TZOFFSETTO:-0400 +TZNAME:Venezuela Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-04:00) Cuiaba BEGIN:STANDARD DTSTART:19700221T235959 @@ -1130,10 +1264,10 @@ RRULE:FREQ=YEARLY;BYMONTH=2;BYDAY=3SA TZNAME:Central Brazilian Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19701017T235959 +DTSTART:19701107T235959 TZOFFSETFROM:-0400 TZOFFSETTO:-0300 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=3SA +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SA TZNAME:Central Brazilian Daylight Time END:DAYLIGHT END:VTIMEZONE @@ -1149,36 +1283,36 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC-04:00) Santiago BEGIN:STANDARD -DTSTART:19700425T235959 +DTSTART:19700509T235959 TZOFFSETFROM:-0300 TZOFFSETTO:-0400 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=-1SA +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA TZNAME:Pacific SA Standard Time END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700905T235959 +DTSTART:19700808T235959 TZOFFSETFROM:-0400 TZOFFSETTO:-0300 -RRULE:FREQ=YEARLY;BYMONTH=9;BYDAY=1SA +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA TZNAME:Pacific SA Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-04:30) Caracas +TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco BEGIN:STANDARD DTSTART:19700101T000000 -TZOFFSETFROM:-0330 -TZOFFSETTO:-0430 -TZNAME:Venezuela Standard Time +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +TZNAME:SA Pacific Standard Time END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE -TZID:(UTC-05:00) Bogota\, Lima\, Quito\, Rio Branco +TZID:(UTC-05:00) Chetumal BEGIN:STANDARD DTSTART:19700101T000000 TZOFFSETFROM:-0400 TZOFFSETTO:-0500 -TZNAME:SA Pacific Standard Time +TZNAME:Eastern Standard Time (Mexico) END:STANDARD END:VTIMEZONE BEGIN:VTIMEZONE @@ -1199,6 +1333,40 @@ TZNAME:Eastern Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-05:00) Haiti +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Haiti Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700308T020000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Haiti Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-05:00) Havana +BEGIN:STANDARD +DTSTART:19701101T010000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Cuba Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700308T000000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Cuba Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-05:00) Indiana (East) BEGIN:STANDARD DTSTART:19701101T020000 @@ -1216,6 +1384,23 @@ TZNAME:US Eastern Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-05:00) Turks and Caicos +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0400 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Turks and Caicos Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700105T000000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0400 +RRULE:FREQ=YEARLY;BYMONTH=1;BYDAY=1MO +TZNAME:Turks and Caicos Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-06:00) Central America BEGIN:STANDARD DTSTART:19700101T000000 @@ -1242,6 +1427,23 @@ TZNAME:Central Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-06:00) Easter Island +BEGIN:STANDARD +DTSTART:19700509T220000 +TZOFFSETFROM:-0500 +TZOFFSETTO:-0600 +RRULE:FREQ=YEARLY;BYMONTH=5;BYDAY=2SA +TZNAME:Easter Island Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700808T220000 +TZOFFSETFROM:-0600 +TZOFFSETTO:-0500 +RRULE:FREQ=YEARLY;BYMONTH=8;BYDAY=2SA +TZNAME:Easter Island Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-06:00) Guadalajara\, Mexico City\, Monterrey BEGIN:STANDARD DTSTART:19701025T020000 @@ -1313,21 +1515,30 @@ END:VTIMEZONE BEGIN:VTIMEZONE TZID:(UTC-08:00) Baja California BEGIN:STANDARD -DTSTART:19701025T020000 +DTSTART:19701101T020000 TZOFFSETFROM:-0700 TZOFFSETTO:-0800 -RRULE:FREQ=YEARLY;BYMONTH=10;BYDAY=-1SU +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU TZNAME:Pacific Standard Time (Mexico) END:STANDARD BEGIN:DAYLIGHT -DTSTART:19700405T020000 +DTSTART:19700308T020000 TZOFFSETFROM:-0800 TZOFFSETTO:-0700 -RRULE:FREQ=YEARLY;BYMONTH=4;BYDAY=1SU +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU TZNAME:Pacific Daylight Time (Mexico) END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-08:00) Coordinated Universal Time-08 +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0800 +TZOFFSETTO:-0800 +TZNAME:UTC-08 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-08:00) Pacific Time (US & Canada) BEGIN:STANDARD DTSTART:19701101T020000 @@ -1362,6 +1573,41 @@ TZNAME:Alaskan Daylight Time END:DAYLIGHT END:VTIMEZONE BEGIN:VTIMEZONE +TZID:(UTC-09:00) Coordinated Universal Time-09 +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0900 +TZOFFSETTO:-0900 +TZNAME:UTC-09 +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-09:30) Marquesas Islands +BEGIN:STANDARD +DTSTART:19700101T000000 +TZOFFSETFROM:-0830 +TZOFFSETTO:-0930 +TZNAME:Marquesas Standard Time +END:STANDARD +END:VTIMEZONE +BEGIN:VTIMEZONE +TZID:(UTC-10:00) Aleutian Islands +BEGIN:STANDARD +DTSTART:19701101T020000 +TZOFFSETFROM:-0900 +TZOFFSETTO:-1000 +RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU +TZNAME:Aleutian Standard Time +END:STANDARD +BEGIN:DAYLIGHT +DTSTART:19700308T020000 +TZOFFSETFROM:-1000 +TZOFFSETTO:-0900 +RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU +TZNAME:Aleutian Daylight Time +END:DAYLIGHT +END:VTIMEZONE +BEGIN:VTIMEZONE TZID:(UTC-10:00) Hawaii BEGIN:STANDARD DTSTART:19700101T000000 diff --git a/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb b/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb index 210fa3e..b2627bd 100644 --- a/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb +++ b/Source/VBNetDemos/PDIWebDemoVB/VTimeZoneTestForm.aspx.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : VTimeZoneTestForm.aspx.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 12/30/2014 -' Note : Copyright 2004-2014, Eric Woodruff, All rights reserved +' Updated : 11/21/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Microsoft VB.NET ' ' This page is used to demonstrate some of the time zone features of the PDI classes @@ -44,7 +44,7 @@ Namespace PDIWebDemoVB ' The time zone information is loaded in the Application_Start event in Global.asax. We'll ' acquire a reader lock on the time zone collection as it's possible other sessions could be ' parsing calendars with time zone data that could change the collection. - VCalendar.TimeZones.Lock.AcquireReaderLock(250) + VCalendar.TimeZones.AcquireReaderLock(250) Try For Each tz In VCalendar.TimeZones @@ -52,7 +52,7 @@ Namespace PDIWebDemoVB cboDestTimeZone.Items.Add(tz.TimeZoneId.Value) Next Finally - VCalendar.TimeZones.Lock.ReleaseReaderLock() + VCalendar.TimeZones.ReleaseReaderLock() End Try txtSourceDate.Text = New DateTime(DateTime.Today.Year, 1, 1, 10, 0, 0).ToString("G") diff --git a/Source/VBNetDemos/PDIWebDemoVB/Web.config b/Source/VBNetDemos/PDIWebDemoVB/Web.config index 9f04abe..02b3d30 100644 --- a/Source/VBNetDemos/PDIWebDemoVB/Web.config +++ b/Source/VBNetDemos/PDIWebDemoVB/Web.config @@ -1,32 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh index 459d1a6..9002601 100644 Binary files a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh and b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Data.dll.refresh differ diff --git a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Web.Controls.dll.refresh b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Web.Controls.dll.refresh deleted file mode 100644 index 4acbfb0..0000000 Binary files a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.Web.Controls.dll.refresh and /dev/null differ diff --git a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh index dc27aeb..962275b 100644 Binary files a/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh and b/Source/VBNetDemos/PDIWebDemoVB/bin/EWSoftware.PDI.dll.refresh differ diff --git a/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo b/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo index 7e5e786..9b35a38 100644 --- a/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo +++ b/Source/VBNetDemos/PDIWebDemoVB/vwd.webinfo @@ -119,6 +119,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb b/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb index 328f1f8..6b6b713 100644 --- a/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb +++ b/Source/VBNetDemos/PDIWinFormsTest/MainForm.vb @@ -24,6 +24,15 @@ Public Partial Class MainForm Inherits System.Windows.Forms.Form + ''' + ''' The main entry point for the application + ''' + Shared Sub Main(Args As String()) + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(false) + Application.Run(new MainForm()) + End Sub + ''' ''' Constructor ''' diff --git a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb index 50c8a9b..88dd01c 100644 --- a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb +++ b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -11,28 +11,3 @@ Option Strict On Option Explicit On - -Namespace My - - 'NOTE: This file is auto-generated; do not modify it directly. To make changes, - ' or if you encounter build errors in this file, go to the Project Designer - ' (go to Project Properties or double-click the My Project node in - ' Solution Explorer), and make changes on the Application tab. - ' - Partial Friend Class MyApplication - - _ - Public Sub New() - MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) - Me.IsSingleInstance = false - Me.EnableVisualStyles = true - Me.SaveMySettingsOnExit = false - Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses - End Sub - - _ - Protected Overrides Sub OnCreateMainForm() - Me.MainForm = Global.PDIWinFormsTest.MainForm - End Sub - End Class -End Namespace diff --git a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp index 8d970f3..5916c7b 100644 --- a/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp +++ b/Source/VBNetDemos/PDIWinFormsTest/My Project/Application.myapp @@ -1,6 +1,6 @@ - true + false MainForm false 0 diff --git a/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj b/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj index 0b397df..ff231a5 100644 --- a/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj +++ b/Source/VBNetDemos/PDIWinFormsTest/PDIWinFormsTest.vbproj @@ -1,5 +1,5 @@  - + Local 8.0.50727 @@ -22,14 +22,14 @@ On On PDIWinFormsTest - PDIWinFormsTest.My.MyApplication + PDIWinFormsTest.MainForm - WindowsForms + WindowsFormsWithCustomSubMain 3.5 - v4.0 + v4.7.2 publish\ true @@ -67,6 +67,7 @@ 42016,42017,42018,42019,42032,42353,42354,42355 full ..\..\EWSPDIDemos.ruleset + false bin\ @@ -87,10 +88,14 @@ 1 42016,42017,42018,42019,42032,42353,42354,42355 none + false true + + app.manifest + System @@ -197,6 +202,7 @@ + @@ -217,17 +223,17 @@ - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData + + {4d1d331e-7475-4260-b9ad-8a31848a6054} + EWSoftware.PDI.Data - - {dbd186a2-8160-4bf3-92d4-61bf262f0ca2} - EWSPDIWinForms + + {1e7aaf3e-6978-4c69-a2fb-916af6f77d9e} + EWSoftware.PDI.Windows.Forms - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI + + {e4be35a2-31c3-4be1-a257-413fb78cdd9b} + EWSoftware.PDI diff --git a/Source/VBNetDemos/PDIWinFormsTest/app.config b/Source/VBNetDemos/PDIWinFormsTest/app.config index 793777f..9659fad 100644 --- a/Source/VBNetDemos/PDIWinFormsTest/app.config +++ b/Source/VBNetDemos/PDIWinFormsTest/app.config @@ -21,6 +21,9 @@ - + + + + diff --git a/Source/VBNetDemos/PDIWinFormsTest/app.manifest b/Source/VBNetDemos/PDIWinFormsTest/app.manifest new file mode 100644 index 0000000..5dbcd41 --- /dev/null +++ b/Source/VBNetDemos/PDIWinFormsTest/app.manifest @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb b/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb index 53f7422..d2a2e20 100644 --- a/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb +++ b/Source/VBNetDemos/RFC2445RecurTest/My Project/AssemblyInfo.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : AssemblyInfo.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 01/01/2015 -' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved +' Updated : 11/20/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' ' Assembly information for the demo application diff --git a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb index 516f0c2..e9f46f5 100644 --- a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb +++ b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vb @@ -2,8 +2,8 @@ ' System : EWSoftware PDI Demonstration Applications ' File : RFC2445RecurTest.vb ' Author : Eric Woodruff (Eric@EWoodruff.us) -' Updated : 01/01/2015 -' Note : Copyright 2004-2015, Eric Woodruff, All rights reserved +' Updated : 11/11/2018 +' Note : Copyright 2004-2018, Eric Woodruff, All rights reserved ' Compiler: Visual Basic .NET ' ' This creates the example recurrence patterns given in the RFC 2445 iCalendar specification starting on page 118 diff --git a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj index 88f0028..0614687 100644 --- a/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj +++ b/Source/VBNetDemos/RFC2445RecurTest/RFC2445RecurTest.vbproj @@ -1,160 +1,28 @@ - - + + - Local - 8.0.50727 - 2.0 - {A60B4D1A-216B-4CA7-B078-91F6F27DADE4} - Debug - AnyCPU - - - - - RFC2445RecurTest - RFC2445RecurTest.snk - None - JScript - Grid - IE50 - false Exe - Binary - On - On - RFC2445RecurTest - RFC2445RecurTest.RFC2445RecurTest - - - Console - - - 3.5 - v4.0 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - false - true - - - bin\ - - - 285212672 - - - - - true - true - true - false - false - false - false - 1 - 42016,42017,42018,42019,42032,42353,42354,42355 - full - ..\..\EWSPDIDemos.ruleset - - - bin\ - - - 285212672 - - - - - false - true - false - true - false - false - false - 1 - 42016,42017,42018,42019,42032,42353,42354,42355 - none - - + netcoreapp2.1 + False + False + False + False + False + False + ProductAttribute + RFC2445RecurTest.snk true + ..\..\EWSPDIDemos.ruleset + false + - - System - - - System.XML - - - - - + + - - My Project\AssemblyInfoShared.vb - - - - Code - - - Code - + + - - - - - - - - - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData - - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - False - Windows Installer 3.1 - true - - - - - - - - - - \ No newline at end of file + + diff --git a/Source/VBNetDemos/RFC2445RecurTest/app.config b/Source/VBNetDemos/RFC2445RecurTest/app.config deleted file mode 100644 index 793777f..0000000 --- a/Source/VBNetDemos/RFC2445RecurTest/app.config +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb b/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb index b2a88ab..88dd01c 100644 --- a/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb +++ b/Source/VBNetDemos/vCardBrowser/My Project/Application.Designer.vb @@ -1,7 +1,7 @@ '------------------------------------------------------------------------------ ' ' This code was generated by a tool. -' Runtime Version:4.0.30319.1 +' Runtime Version:4.0.30319.42000 ' ' Changes to this file may cause incorrect behavior and will be lost if ' the code is regenerated. @@ -11,28 +11,3 @@ Option Strict On Option Explicit On - -Namespace My - - 'NOTE: This file is auto-generated; do not modify it directly. To make changes, - ' or if you encounter build errors in this file, go to the Project Designer - ' (go to Project Properties or double-click the My Project node in - ' Solution Explorer), and make changes on the Application tab. - ' - Partial Friend Class MyApplication - - _ - Public Sub New() - MyBase.New(Global.Microsoft.VisualBasic.ApplicationServices.AuthenticationMode.Windows) - Me.IsSingleInstance = false - Me.EnableVisualStyles = true - Me.SaveMySettingsOnExit = false - Me.ShutDownStyle = Global.Microsoft.VisualBasic.ApplicationServices.ShutdownMode.AfterMainFormCloses - End Sub - - _ - Protected Overrides Sub OnCreateMainForm() - Me.MainForm = Global.vCardBrowser.VCardBrowserForm - End Sub - End Class -End Namespace diff --git a/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp b/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp index ef2045a..e5a8767 100644 --- a/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp +++ b/Source/VBNetDemos/vCardBrowser/My Project/Application.myapp @@ -1,6 +1,6 @@ - true + false VCardBrowserForm false 0 diff --git a/Source/VBNetDemos/vCardBrowser/PhotoControl.vb b/Source/VBNetDemos/vCardBrowser/PhotoControl.vb index ab0d4b5..2c4329c 100644 --- a/Source/VBNetDemos/vCardBrowser/PhotoControl.vb +++ b/Source/VBNetDemos/vCardBrowser/PhotoControl.vb @@ -90,7 +90,7 @@ Public Partial Class PhotoControl Try bmImage.Dispose() - If Not String.IsNullOrEmpty(value) Then + If Not String.IsNullOrWhiteSpace(value) Then bmImage = New Bitmap(value) Else bmImage = new Bitmap(1, 1) diff --git a/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb b/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb index 870af7c..b36f4b2 100644 --- a/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb +++ b/Source/VBNetDemos/vCardBrowser/VCardBrowserForm.vb @@ -44,6 +44,15 @@ Public Partial Class VCardBrowserForm '=============================================================== + ''' + ''' The main entry point for the application + ''' + Shared Sub Main(Args As String()) + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(false) + Application.Run(new VCardBrowserForm()) + End Sub + ''' ''' Constructor ''' @@ -117,13 +126,13 @@ Public Partial Class VCardBrowserForm ' existence. sortName1 = x.SortString.Value - If String.IsNullOrEmpty(sortName1) Then + If String.IsNullOrWhiteSpace(sortName1) Then sortName1 = x.Name.SortableName End If sortName2 = y.SortString.Value - If String.IsNullOrEmpty(sortName2) Then + If String.IsNullOrWhiteSpace(sortName2) Then sortName2 = y.Name.SortableName End If diff --git a/Source/VBNetDemos/vCardBrowser/app.config b/Source/VBNetDemos/vCardBrowser/app.config index 793777f..9659fad 100644 --- a/Source/VBNetDemos/vCardBrowser/app.config +++ b/Source/VBNetDemos/vCardBrowser/app.config @@ -21,6 +21,9 @@ - + + + + diff --git a/Source/VBNetDemos/vCardBrowser/app.manifest b/Source/VBNetDemos/vCardBrowser/app.manifest new file mode 100644 index 0000000..5dbcd41 --- /dev/null +++ b/Source/VBNetDemos/vCardBrowser/app.manifest @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj b/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj index 1d87a25..c15eb48 100644 --- a/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj +++ b/Source/VBNetDemos/vCardBrowser/vCardBrowser.vbproj @@ -1,5 +1,5 @@  - + Local 8.0.50727 @@ -22,14 +22,14 @@ On On vCardBrowser - vCardBrowser.My.MyApplication + vCardBrowser.VCardBrowserForm - WindowsForms + WindowsFormsWithCustomSubMain 3.5 - v4.0 + v4.7.2 publish\ true @@ -67,6 +67,7 @@ 42016,42017,42018,42019,42032,42353,42354,42355 full ..\..\EWSPDIDemos.ruleset + false bin\ @@ -87,10 +88,14 @@ 1 42016,42017,42018,42019,42032,42353,42354,42355 none + false true + + app.manifest + System @@ -217,6 +222,7 @@ + @@ -237,17 +243,17 @@ - - {13eb4641-36a6-4c9c-af8c-29f3763d392f} - EWSPDIData + + {4d1d331e-7475-4260-b9ad-8a31848a6054} + EWSoftware.PDI.Data - - {dbd186a2-8160-4bf3-92d4-61bf262f0ca2} - EWSPDIWinForms + + {1e7aaf3e-6978-4c69-a2fb-916af6f77d9e} + EWSoftware.PDI.Windows.Forms - - {23b6c08d-3cde-4f0b-a3b5-a3831adeb79f} - EWSPDI + + {e4be35a2-31c3-4be1-a257-413fb78cdd9b} + EWSoftware.PDI