Hallo zusammen,
ich habe eine Feiertagsberechnung gefunden und für meine Bedürfnisse angepasst. Jetzt habe ich nur das Problem das die Berechnung in C# ist, ich sie in meinem Programm aber als VB-Code benötige.
Fehlermeldung:
Fehler 2 Class "Feiertag" muss "Function CompareTo(other As AgentTool.Feiertage.Feiertag) As Integer" für die System.IComparable(Of Feiertag)-Schnittstelle implementieren. Y:\Eigene Dateien\Visual Studio 2012\TeamProjekte\SDT_AT_Tool\AgentTool\Source\Klassen\Feiertage.vb
Allerdings habe ich die
Hier der gesamte C# Code, der Funktiniert. (Ich habe den C#-Code in einer .dll in das VB-Projekt eingebunden.)
Spoiler anzeigen
ich habe eine Feiertagsberechnung gefunden und für meine Bedürfnisse angepasst. Jetzt habe ich nur das Problem das die Berechnung in C# ist, ich sie in meinem Programm aber als VB-Code benötige.
Fehlermeldung:
Fehler 2 Class "Feiertag" muss "Function CompareTo(other As AgentTool.Feiertage.Feiertag) As Integer" für die System.IComparable(Of Feiertag)-Schnittstelle implementieren. Y:\Eigene Dateien\Visual Studio 2012\TeamProjekte\SDT_AT_Tool\AgentTool\Source\Klassen\Feiertage.vb
Allerdings habe ich die
CompareTo
Function, es wird mir auch sonst kein Fehler angezeigt.VB.NET-Quellcode
- Public Class Feiertag : Implements IComparable(Of Feiertag) '<--- Hier wird der Fehler angezeigt
- Private MyDatum As DateTime
- ''' <summary>
- ''' Prüfung ob ein Tag ein Feiertag ist.
- ''' </summary>
- ''' <param name="other">Möglicher Feiertag</param>
- ''' <returns></returns>
- Public Function CompareTo(other As Feiertage.Feiertag) As Integer
- Return Me.MyDatum.Date.CompareTo(other.MyDatum.Date)
- End Function
Hier der gesamte C# Code, der Funktiniert. (Ich habe den C#-Code in einer .dll in das VB-Projekt eingebunden.)
C#-Quellcode
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace Feiertage
- {
- public class Feiertag : IComparable<Feiertag>
- {
- private bool _isSDT;
- private DateTime _datum;
- private string _name;
- /// <summary>
- /// Eine Feiertag
- /// </summary>
- /// <param name="isSDT">Markiert ob es eine SDT-Feiertag ist</param>
- /// <param name="datum">Datum des Tages</param>
- /// <param name="name">Name oder Bezeichnung</param>
- public Feiertag(bool isSDT, DateTime datum, string name)
- {
- this.IsSDT = isSDT;
- this.Datum = datum;
- this.Name = name;
- }
- /// <summary>
- /// Beschreibung: Name des Feiertags
- /// </summary>
- public string Name
- {
- get
- {
- return _name;
- }
- set
- {
- _name = value;
- }
- }
- /// <summary>
- /// Beschreibung: Datum des Feiertags
- /// </summary>
- public DateTime Datum
- {
- get
- {
- return _datum;
- }
- set
- {
- _datum = value;
- }
- }
- /// <summary>
- /// Beschreibung: Markierung ob es ein SDT-Interner Feiertag ist.
- /// </summary>
- public bool IsSDT
- {
- get
- {
- return _isSDT;
- }
- set
- {
- _isSDT = value;
- }
- }
- #region IComparable<Feiertag> Member
- /// <summary>
- /// Prüfung ob ein Tag ein Feiertag ist.
- /// </summary>
- /// <param name="other">Möglicher Feiertag</param>
- /// <returns></returns>
- public int CompareTo(Feiertag other)
- {
- return this._datum.Date.CompareTo(other._datum.Date);
- }
- #endregion
- }
- public class FeiertagsUebersicht
- {
- private static FeiertagsUebersicht Instance;
- private List<Feiertag> feiertage;
- private int year;
- /// <summary>
- /// Beschreibung: Das gesuchte Jahr
- /// </summary>
- public int CurrentYear
- {
- get { return year; }
- set { year = value; }
- }
- /// <summary>
- /// erstellt eine neue Liste der Feiertage
- /// </summary>
- /// <param name="year">Angabe des Jahres</param>
- /// <returns></returns>
- public static FeiertagsUebersicht GetInstance(int year)
- {
- if (Instance == null || year != Instance.CurrentYear)
- {
- Instance = new FeiertagsUebersicht(year);
- return Instance;
- }
- return Instance;
- }
- /// <summary>
- /// Beschreibung: Gibt variable Feiertage zurueck
- /// </summary>
- public List<Feiertag> SDTFeiertag
- {
- get { return feiertage.FindAll(delegate(Feiertag f) { return f.IsSDT; }); }
- }
- /// <summary>
- /// Beschreibung: gibt feste Feiertage zurueck
- /// </summary>
- public List<Feiertag> NichtSDTFeiertag
- {
- get { return feiertage.FindAll(delegate(Feiertag f) { return !f.IsSDT; }); }
- }
- /// <summary>
- /// Beschreibung: Gibt alle Feiertage zurueck
- /// </summary>
- public List<Feiertag> AlleFeiertage
- {
- get { return feiertage.FindAll(delegate(Feiertag f) { return true; }); }
- }
- /// <summary>
- /// Prüft ob das Datum ein Feiertag ist.
- /// </summary>
- /// <param name="value">Datum</param>
- /// <returns>True/False</returns>
- public bool isFeiertag(DateTime value)
- {
- return (feiertage.Find(delegate(Feiertag f) { return f.Datum.Date == value.Date; }) != null);
- }
- /// <summary>
- /// Prüft ob der Feiertag ein SDT-Feiertag ist
- /// </summary>
- /// <param name="value">Datum</param>
- /// <returns>True/False</returns>
- public bool isSDTFeiertag(DateTime value)
- {
- return (feiertage.Find(delegate(Feiertag f) { return (f.Datum.Date == value.Date) && f.IsSDT; }) != null);
- }
- /// <summary>
- /// Gibt den Namen eines Feiertags zurück
- /// </summary>
- /// <param name="value">Datum</param>
- /// <returns>Name</returns>
- public Feiertag GetFeiertagName(DateTime value)
- {
- return (feiertage.Find(delegate(Feiertag f) { return f.Datum.Date == value.Date; }));
- }
- /// <summary>
- /// Erstellt eine neue Liste der Feiertage für das gesuchte Jahr
- /// </summary>
- /// <param name="year">Das gesuchte Jahr</param>
- private FeiertagsUebersicht(int year)
- {
- this.CurrentYear = year;
- DateTime bussundbettag = GetBussUndBettag();
- DateTime osterSonntag = GetOsterSonntag();
- #region fillList
- this.feiertage = new List<Feiertag>();
- // Feste Feiertage
- this.feiertage.Add(new Feiertag(true, new DateTime(year, 1, 1), ftName.Neujahr.ToString())); // "Neujahr"
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 1, 6), ftName.HeiligeDreiKoenige.ToString())); // "Heilige drei Königs Tag"
- this.feiertage.Add(new Feiertag(true, new DateTime(year, 5, 1), ftName.TagDerArbeit.ToString())); // "Tag der Arbeit" / "Maifeiertag"
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 8, 15), ftName.MariaHimmelfahrt.ToString())); // "Mariä Himmelfahrt"
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 10, 3), ftName.TadDerDeutschenEinheit.ToString())); // "Tag der deutschen Einheit"
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 10, 31), ftName.Reformationstag.ToString())); // "Reformationstag"
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 11, 1), ftName.Allerheiligen.ToString())); // "Allerheiligen "
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 12, 25), ftName.Heiligabend.ToString())); // "Heiligabend"
- this.feiertage.Add(new Feiertag(true, new DateTime(year, 12, 25), ftName.ErterWeihnachten.ToString())); // "1. Weihnachtstag"
- this.feiertage.Add(new Feiertag(true, new DateTime(year, 12, 26), ftName.ZweiterWeihnachten.ToString())); // "2. Weihnachtstag"
- this.feiertage.Add(new Feiertag(false, new DateTime(year, 12, 31), ftName.Silvester.ToString())); // "Silvester"
- // Flexible Feiertage
- this.feiertage.Add(new Feiertag(false, bussundbettag, ftName.BussUndBettag.ToString())); // "Buss und Bettag
- this.feiertage.Add(new Feiertag(true, osterSonntag, ftName.OsterSonntag.ToString())); // "Ostersonntag"
- this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(-3), ftName.Gruendonnerstag.ToString())); // "Gründonnerstag"
- this.feiertage.Add(new Feiertag(true, osterSonntag.AddDays(-2), ftName.Karfreitag.ToString())); // "Karfreitag"));
- this.feiertage.Add(new Feiertag(true, osterSonntag.AddDays(1), ftName.OsterMontag.ToString())); // "Ostermontag"));
- this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(39), ftName.ChristiHimmelfahrt.ToString())); // "Christi Himmelfahrt"
- this.feiertage.Add(new Feiertag(true, osterSonntag.AddDays(49), ftName.Pfingssonntag.ToString())); // "Pfingstsonntag"
- this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(50), ftName.Pfingstmontag.ToString())); // "Pfingstmontag"
- this.feiertage.Add(new Feiertag(false, osterSonntag.AddDays(60), ftName.Fronleichnam.ToString())); // "Fronleichnam"
- #endregion
- }
- /// <summary>
- /// Ermittelt das Datum des Ostersonntags (Gausformel)
- /// </summary>
- /// <returns>Datum von Ostersonntag</returns>
- private DateTime GetOsterSonntag()
- {
- int x = CurrentYear; // das Jahr
- int k; // die Säkularzahl
- int m; // die säkulare Mondschaltung
- int s; // die säkulare Sonnenschaltung
- int a; // der Mondparameter
- int d; // der Keim für den ersten Vollmond im Frühling
- int r; // die kalendarische Korrekturgröße
- int og; // die Ostergrenze
- int sz; // der ersten Sonntag im März
- int oe; // die Entfernung des Ostersonntags von der Ostergrenze
- int os; // das Datum des Ostersonntags als Märzdatum (32.März = 1.April)
- int OsterTag;
- int OsterMonat;
- k = x / 100;
- m = 15 + (3 * k + 3) / 4 - (8 * k + 13) / 25;
- s = 2 - (3 * k + 3) / 4;
- a = x % 19;
- d = (19 * a + m) % 30;
- r = (d + a / 11) / 29;
- og = 21 + d - r;
- sz = 7 - (x + x / 4 + s) % 7;
- oe = 7 - (og - sz) % 7;
- os = og + oe;
- OsterMonat = 2 + (int)(os + 30) / 31;
- OsterTag = os - 31 * ((int)OsterMonat / 4);
- return new DateTime(CurrentYear, OsterMonat, OsterTag);
- }
- /// <summary>
- /// Errechnet das Datum des Buß- und Bettags
- /// </summary>
- /// <returns>Das errechnete Datum des Buß- und Bettags in dem angegebenen Jahr</returns>
- internal DateTime GetBussUndBettag()
- {
- // Der Buß- und Bettag ist immer ein Mittwoch, er liegt zwischen dem 16. und 22. November
- return GetDateOfLastWeekday(new DateTime(year, 11, 22), DayOfWeek.Wednesday);
- }
- /// <summary>
- /// Bestimmt innerhalb der letzten 7 Tage das Datum mit dem gewünschten Wochentag.
- /// </summary>
- /// <param name="startDate">Ausgangsdatum, und zwar das letztmögliche Datum innerhalb
- /// des Bereichs von 7 Tagen (Beispiel: in einem Bereich Do/Fr/Sa/So/Mo/Di/Mi der Mittwoch)</param>
- /// <param name="targetDayOfWeek">Der gewünschte Wochentag (im Beispiel der Mittwoch)</param>
- /// <returns>Das Datum mit dem gewünschten Wochentag innerhalb der letzten 7 Tage.</returns>
- public static DateTime GetDateOfLastWeekday(DateTime startDate, DayOfWeek targetDayOfWeek)
- {
- DayOfWeek startDayOfWeek = startDate.DayOfWeek;
- if (startDayOfWeek == targetDayOfWeek)
- {
- return startDate;
- }
- int diff = 0;
- if (startDayOfWeek < targetDayOfWeek)
- {
- diff = targetDayOfWeek - startDayOfWeek - 7;
- }
- else if (startDayOfWeek > targetDayOfWeek)
- {
- diff = targetDayOfWeek - startDayOfWeek;
- }
- return startDate.AddDays(diff);
- }
- }
- /// <summary>
- /// Liste der Feiertagsnamen
- /// </summary>
- public enum ftName
- {
- Neujahr,
- HeiligeDreiKoenige,
- TagDerArbeit,
- MariaHimmelfahrt,
- TadDerDeutschenEinheit,
- Reformationstag,
- Allerheiligen,
- Heiligabend,
- ErterWeihnachten,
- ZweiterWeihnachten,
- Gruendonnerstag,
- Karfreitag,
- OsterSonntag,
- OsterMontag,
- ChristiHimmelfahrt,
- Pfingssonntag,
- Pfingstmontag,
- Fronleichnam,
- BussUndBettag,
- Silvester
- };
- }
There is no CLOUD - just other people's computers
Q: Why do JAVA developers wear glasses?
A: Because they can't C#
Daily prayer:
"Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."
Q: Why do JAVA developers wear glasses?
A: Because they can't C#
Daily prayer:
"Dear Lord, grand me the strength not to kill any stupid people today and please grant me the ability to punch them in the face over standard TCP/IP."