Date Pattern unter .NET

Unter .NET gibt es einige Eigenschaften, welche mit Formatierungsstrings gefüttert werden, so z.B. die Eigenschaft:

picker.CustomFormat="dd/MM/yyyy HH:mm:ss";

Die Herangehensweise den Formatierungsstring von Hand einzutragen ist dabei gefährlich – spätestens wenn es an die Lokalisierung der Anwendung geht. Glücklicherweise kann man diese Date Pattern anhand der aktuellen Kultureinstellung (CurrentCulture) ermitteln:

Application.CurrentCulture.DateTimeFormat.LongDatePattern
Application.CurrentCulture.DateTimeFormat.LongTimePattern
Application.CurrentCulture.DateTimeFormat.ShortDatePattern
Application.CurrentCulture.DateTimeFormat.ShortTimePattern

Neben den hier gezeigten Pattern, gibt es noch eine Reihe weiterer wie z.B. MonthDayPattern. Obige Definition würde nun wie folgt aussehen:

picker.CustomFormat=String.Format("{0} {1}", Application.CurrentCulture.DateTimeFormat.ShortDatePattern, Application.CurrentCulture.DateTimeFormat.LongTimePattern);

jQuery Ajax Abfrage synchron durchführen

Zwar steht AJAX für Asynchronous JavaScript, aber trotzdem kann man solche Abfragen auch synchron durchführen. Mit jQuery kann man das ganze dabei wie folgt bewerkstelligen:

$.ajax({url: "getName.php", 
	type: "get",
	data:{lang:"american"},
	success: function(result){
		name=result;
}, async: false});

Wichtig ist, das der Schlüssel async auf false gesetzt ist – das Verhalten ist in neueren Versionen von jQuery als veraltet gekennzeichnet, kann aber noch genutzt werden.

Dateien in PHP rekursiv ermitteln

In PHP gibt es (nach meinem Wissen) keine einfache Methode um die Dateien eines Ordner rekursiv zu ermitteln. Möchte man die Dateien eines Ordners ohne dessen Unterordner ermitteln, so kann man scandir nutzen. Auf Basis dessen, habe ich eine Funktion geschrieben, welche diesen Operation auf Wunsch auch rekursiv ausführt:

function GetFiles($directory, $recursiv)
{	
	if($directory[strlen($directory)-1]!='/') $directory.="/";
	
	$files = array();
	$subDirectories = array();
	
	$scandirFiles = scandir($directory); //Read files

	foreach ($scandirFiles as $file) 
	{
		if($file=="." || $file=="..") continue;

		if(is_dir($directory.$file))
		{
			array_push($subDirectories, $directory.$file);
		}
		else if(is_file($directory.$file))
		{
			array_push($files, $directory.$file);
		}
	}

	 if($recursiv)
	 {
		 foreach ($subDirectories as $dirs) 
		 {
			 $subDirectoryFiles=GetFiles($dirs, $recursiv);
			 $files = array_merge($files, $subDirectoryFiles);
		 }
	 }
	 
	 return $files;
}

Genutzt wird die Funktion wie folgt:

$files = GetFiles('images/', true);

Der Rückgabewert ist ein Array, in welchem die Dateien mit ihren relativen Pfaden enthalten sind.

Primärschlüssel unter MySQL neu durchnummerieren

In einer Datenbanktabelle verfügt man im Normalfall über ein Feld, welches als Primärschlüssel fungiert. Dieses Feld ist dabei in den meisten Fällen als Integer mit einer Autoinkrement-Funktion ausgelegt. Unter Umständen kann es passieren, das man diese ID neu von 1 an vergeben möchten, also ein sogenanntes Renumbering durchführen möchte. Mittels SQL kann man das ganze dabei wie folgt erreichen:

SET @a = 0;
UPDATE tabellenName SET ID = (@a := @a +1);
ALTER TABLE tabellenName  AUTO_INCREMENT = 1;

Bei der Ausführung dieser Befehle wird das Feld ID ab 1 neu durchnummeriert und der Autoinkrement-Index auf den entsprechenden Wert gesetzt.

Private Variablen und Eigenschaften mittels NUnit testen

Manchmal möchte man private Variablen und Eigenschaften einer Klasse mittels NUnit testen. Im Normalfall lautet die Antwort auf diese Fragestellung – Nein. Stattdessen soll nur das öffentliche Interface getestet werden. Möchte bzw. muss man trotzdem ein privates Mitglied einer Klasse testen, so muss man sich der Reflection bedienen. Das könnte dann so aussehen:

string[] lines=(string[])typeof(MyClass).GetField("Lines",BindingFlags.NonPublic|BindingFlags.Static).GetValue(null);

In diesem Fall wird sich das statische String Array Lines aus der Klasse MyClass geholt. Je nachdem, wie man die entsprechenden BindingFlags einstellt, ist es auch möglich Instanzvariablen zu ermitteln.