diff --git a/src/main/java/caosdb/server/query/test/DatetimeLexer.g4 b/src/main/java/caosdb/server/query/test/DatetimeLexer.g4
new file mode 100644
index 0000000000000000000000000000000000000000..b4c5d4db00973d1c5db0a78be4589726e24522b6
--- /dev/null
+++ b/src/main/java/caosdb/server/query/test/DatetimeLexer.g4
@@ -0,0 +1,86 @@
+lexer grammar DatetimeLexer;
+
+
+NUM:
+        ('0' .. '9')+
+    ;
+
+HYPHEN:
+        '-'
+    ;
+
+TXT:
+	('a'..'z' | 'A'..'Z' | '_' | '-' {_input.LA(1) != '>'}? | '+' | '&' | ';' | ',' | '$' | ':' | '%' | '^' | '~' {_input.LA(1) != '='}? | '`' | '´' | 'ö' | 'ä' | 'ß' | 'ü' | 'Ö' | 'Ä' | 'Ü' | '@' | '[' | ']' | '{' | '}' )+
+;
+
+COLON:
+        ':'
+    ;
+
+DOT:
+        '.'
+    ;
+
+fragment 
+ESC_MARKER:
+	'\\'
+;
+
+fragment
+DOUBLE_QUOTE:
+	'"'
+;
+
+fragment
+SINGLE_QUOTE:
+	'\''
+;
+
+
+SINGLE_QUOTE_START:
+	'\'' -> pushMode(SINGLE_QUOTE_MODE)
+;
+
+DOUBLE_QUOTE_START:
+	'"' -> pushMode(DOUBLE_QUOTE_MODE)
+;
+
+mode SINGLE_QUOTE_MODE;
+
+	SINGLE_QUOTE_ESCAPED_CHAR:
+		ESC_MARKER
+		( '\'' | '\\' | '*' )
+	;
+
+	SINGLE_QUOTE_END:
+		'\'' -> mode(DEFAULT_MODE)
+	;
+	
+	SINGLE_QUOTE_STAR:
+		'*'
+	;
+
+	SINGLE_QUOTE_ANY_CHAR:
+		~('\''|'\\'|'*')+
+	;
+	
+mode DOUBLE_QUOTE_MODE;
+
+	DOUBLE_QUOTE_ESCAPED_CHAR:
+		ESC_MARKER
+		( '"' | '\\' | '*' )
+	;
+
+	DOUBLE_QUOTE_END:
+		'"' -> mode(DEFAULT_MODE)
+	;
+	
+	DOUBLE_QUOTE_STAR:
+		'*'
+	;
+
+	DOUBLE_QUOTE_ANY_CHAR:
+		~('"'|'\\'|'*')+
+	;
+
+
diff --git a/src/main/java/caosdb/server/query/test/DatetimeParser.g4 b/src/main/java/caosdb/server/query/test/DatetimeParser.g4
new file mode 100644
index 0000000000000000000000000000000000000000..0f5c74fdd9cdc7bd1af739b7c75b6f14df4741d8
--- /dev/null
+++ b/src/main/java/caosdb/server/query/test/DatetimeParser.g4
@@ -0,0 +1,63 @@
+parser grammar DatetimeParser;
+
+options { tokenVocab = DatetimeLexer; }
+
+datetime:
+        (
+        double_quoted_datetime 
+        | single_quoted_datetime 
+        | iso_datetime
+        )
+    ;
+
+single_quoted_datetime returns [String text] locals [StringBuffer sb]
+    @init{$sb = new StringBuffer();}
+    @after{$text = $sb.toString();}
+    :
+        SINGLE_QUOTE_START
+        (
+        d = iso_datetime {$sb.append($d.text);}
+        )
+        SINGLE_QUOTE_END
+    ;
+
+
+
+double_quoted_datetime returns [String text] locals [StringBuffer sb]
+    @init{$sb = new StringBuffer();}
+    @after{$text = $sb.toString(); }
+:   
+        DOUBLE_QUOTE_START
+        (
+        d = iso_datetime { $sb.append($d.text); }
+        )
+        DOUBLE_QUOTE_END
+;
+
+
+
+
+iso_datetime
+:
+	NUM // year 
+	(
+		HYPHEN NUM // mon
+		( 
+			HYPHEN NUM // day of mon
+			(
+				(m=TXT {$m.text.equals("T")}?)?// compliance with iso datetime
+				NUM // hour
+				(
+					COLON NUM // minut 
+					(
+						COLON NUM // sec 
+						(
+							DOT NUM // millisec
+						)?
+					)?
+				)?
+			)?
+		)?
+	)?	
+;
+