Freitextfeld als Datum formatieren?

Felix B. hinzugefügt 37 Tagen her
unbeantwortet

Liebes Citavi-Team,

ich verwende ein Freitext-Feld, um für den Literaturtyp "Gesetz/Verordnung" das Datum des Inkrafttretens zu erfassen. Dort verwende ich einheitlich das Format 16.04.2019.

In der (englischsprachigen) Publikation möchte ich dieses Datum nun als 16 April 2019 ausgeben. Für "klassische" Datumsfelder kann ich das Datumsformat bekanntlich im Zitationsstil-Editor zum einen allgemein, zum anderen komponentenspezifisch einstellen.

Nun meine Frage: Gibt es einen Weg, das auch für ein Freitextfeld zu erreichen - d.h. ein dort erkanntes Datum umzuformatieren? Ich kann mir vorstellen, dass man dazu "nur" die Funktion "Ausgabe der Komponente per Programm-Code filtern" mit dem richtigen Programm-Code füttern muss.

Die Sache wird vielleicht dadurch vereinlicht, dass die Datenerfassung einheitlich im Format dd/MM/yyyy erfolgt ist

Schon vorab vielen Dank!

Beste Grüße

Felix

Kommentare (4)

Foto
1

Das wird schon gehen, aber im Moment widersprechen sich der zweite und der vorletzte Satz. Sind die Daten im Feld im Format dd.MM.yyyy oder im Format dd/MM/yyyy eingegeben?


Naja, wie dem auch sei, Mickey-Maus-Komponente mit folgendem Code:

using System.Linq;
using System.Collections.Generic;
using SwissAcademic.Citavi;
using SwissAcademic.Citavi.Metadata;
using SwissAcademic.Collections;
using SwissAcademic.Drawing;

using System;
using System.Globalization;

namespace SwissAcademic.Citavi.Citations
{
	public class ComponentPartFilter
		:
		IComponentPartFilter
	{
		public IEnumerable<ITextUnit> GetTextUnits(ComponentPart componentPart, Template template, Citation citation, out bool handled)
		{
			handled = true;
			
			if (citation == null) return null;
			
			Reference reference = citation.Reference;
			if (reference == null) return null;
			
			var output = new TextUnitCollection();
			
			DateTime dt;
			
			DateTime.TryParseExact(reference.CustomField2, "d.M.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
			if (dt == null || dt.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture) == "01 January 0001") return null;
			
			string text = dt.ToString("dd MMMM yyyy", CultureInfo.InvariantCulture);
			
			LiteralTextUnit textUnit = new LiteralTextUnit(text);
			
			output.Add(textUnit);			

			return output;
			
			
		}
	}
}
Mickey-Maus-Komponente meint eine Komponente, deren einziges Element ein Textfeld ist, bei dem der Inhalt vollkommen egal ist.

Foto
1

Sorry, es war spät gestern. Die Daten sind im Format dd.MM.yyyy (d.h. 31.12.1999) erfasst.

Jedenfalls herzlichen Dank, das hilft mir schonmal sehr viel weiter!

Leider sind Makros für mich ein Buch mit sieben Siegeln. Daher erlaube ich mir noch folgende Nachfrage: Gibt es auch eine Möglichkeit, in einer Komponente mit mehreren Elementen alle als Datum (im Format dd.MM.yyyy) erkannten Werte in das Format dd MMMM yyyy umzuschreiben, gleichzeit aber andere Werte (etwa Text) aber unverändert auszugeben?

Nochmal vielen Dank bis hierhin!

Foto
Foto
1

Wo kommen denn bei den anderen Elementen die Daten her? Aus welchen Feldern? Sind irgendwo Datumsangaben mit anderen Strings kombiniert in einem Feld? Ich sag mal so: geht alles, aber insbesondere im letzterem Fall wird es ohne Spaß am Ausprobieren schwierig.

On Wed, Apr 17, 2019, 21:03 Citavi Service, <service@citavi.com> wrote:

Foto
1

Ich mach's mal konkret:

Ich verwende bislang für den für den Literaturtyp "Gesetz/Verordnung" eine Komponente, die wie folgt aussieht:

(<Datum/Jahr>, entry into force <Freitext 2>)

Das Textelement "entry into force" ist mit der Bedingung "Nur anwenden, wenn das nachfolgende Element Daten enthält" versehen.

Daraus wird dann beispielsweise: (23 March 2001, entry into force 21 November 2008)

oder, wenn Freitext 2 leer ist: (23 March 2001)

oder, wenn Datum/Jahr leer ist: (entry into force 21 November 2008)

Teilweise muss ich aber auch ausgeben: (23 March 2001, not yet in force). Da das Fehlen einer Datumsangabe im Freitext 2 aber nicht unbedingt "not yet in force" beduetet, schreibe ich den Vermerk "not yet in force" bislang in das Feld Datum/Jahr. Schöner wäre es natürlich, wenn in den Vermerk in Freitext 2 eingeben kann. Das geht aber bislang nicht, da dann - wegen der o.g. Bedingung - dann "entry into force not yet in force" ausgegeben würde.

So weit, so kompliziert - ich hoffe, ich konnte mich verständlich ausdrücken ;-)