@@ -41,6 +41,14 @@ public class TestDate12ParseInfo
4141 {
4242 private static sbyte [ ] Ascii ( string s ) => s . GetSignedBytes ( Encoding . ASCII ) ;
4343
44+ private static Encoding GetTestEncoding ( string name ) => name switch
45+ {
46+ "ASCII" => Encoding . ASCII ,
47+ "UTF8" => Encoding . UTF8 ,
48+ "IBM037" => CodePagesEncodingProvider . Instance . GetEncoding ( 37 ) ,
49+ _ => throw new ArgumentOutOfRangeException ( nameof ( name ) , name , null )
50+ } ;
51+
4452 // ═══════════════════════════════════════════════════════════════════════
4553 // Parse (ASCII)
4654 // ═══════════════════════════════════════════════════════════════════════
@@ -61,6 +69,31 @@ public void Parse_ReturnsCorrectDateTime()
6169 Assert . Equal ( 0 , dt . Second ) ;
6270 }
6371
72+ [ Theory ]
73+ [ InlineData ( "ASCII" ) ]
74+ [ InlineData ( "UTF8" ) ]
75+ [ InlineData ( "IBM037" ) ]
76+ public void Parse_ForceStringDecoding_ReturnsCorrectDateTime ( string encodingName )
77+ {
78+ // Regression for issue #50:
79+ // var val = fpi.Parse(1, "260316143000".GetSignedBytes(Encoding.ASCII), 0, null);
80+ var encoding = GetTestEncoding ( encodingName ) ;
81+ var fpi = new Date12ParseInfo
82+ {
83+ ForceStringDecoding = true ,
84+ Encoding = encoding
85+ } ;
86+ var val = fpi . Parse ( 1 , "260316143000" . GetSignedBytes ( encoding ) , 0 , null ) ;
87+ var dt = ( DateTime ) val . Value ;
88+
89+ Assert . Equal ( 2026 , dt . Year ) ;
90+ Assert . Equal ( 3 , dt . Month ) ;
91+ Assert . Equal ( 16 , dt . Day ) ;
92+ Assert . Equal ( 14 , dt . Hour ) ;
93+ Assert . Equal ( 30 , dt . Minute ) ;
94+ Assert . Equal ( 0 , dt . Second ) ;
95+ }
96+
6497 [ Fact ]
6598 public void Parse_YearAbove50_Is1900sEra ( )
6699 {
0 commit comments