@@ -288,6 +288,9 @@ public void TestSelectDateTime(string dbValue, string dbType, DateTime? expected
288288 connection . Open ( ) ;
289289 using ( var command = connection . CreateCommand ( ) )
290290 {
291+ command . CommandText = "ALTER SESSION SET TIMEZONE = 'America/Los_Angeles'" ;
292+ command . ExecuteNonQuery ( ) ;
293+
291294 EnableStructuredTypes ( connection ) ;
292295 SetTimePrecision ( connection , 9 ) ;
293296 var rawValueString = $ "'{ dbValue } '::{ dbType } ";
@@ -328,10 +331,10 @@ internal static IEnumerable<object[]> DateTimeConversionCases()
328331 } ;
329332 yield return new object [ ]
330333 {
331- "2024-07-11 14:20:05 -7:00 " ,
334+ "2024-07-11 14:20:05" ,
332335 SFDataType . TIMESTAMP_LTZ . ToString ( ) ,
333336 null ,
334- DateTime . Parse ( "2024-07-11 21 :20:05" ) . ToLocalTime ( )
337+ DateTime . SpecifyKind ( DateTime . Parse ( "2024-07-11 14 :20:05" ) , DateTimeKind . Local )
335338 } ;
336339 yield return new object [ ]
337340 {
@@ -356,10 +359,10 @@ internal static IEnumerable<object[]> DateTimeConversionCases()
356359 } ;
357360 yield return new object [ ]
358361 {
359- "2024-07-11 14:20:05.123456789 -7 :00" ,
362+ "2024-07-11 14:20:05.123456789 -2 :00" ,
360363 SFDataType . TIMESTAMP_LTZ . ToString ( ) ,
361364 null ,
362- DateTime . Parse ( "2024-07-11 21 :20:05.1234568" ) . ToLocalTime ( )
365+ DateTime . SpecifyKind ( DateTime . Parse ( "2024-07-11 09 :20:05.1234568" ) , DateTimeKind . Local )
363366 } ;
364367 yield return new object [ ]
365368 {
@@ -377,10 +380,10 @@ internal static IEnumerable<object[]> DateTimeConversionCases()
377380 } ;
378381 yield return new object [ ]
379382 {
380- "9999-12-31 23:59:59.999999 +13 :00" ,
383+ "1883-11-19 00:00:00.000000 -5 :00" ,
381384 SFDataType . TIMESTAMP_LTZ . ToString ( ) ,
382385 null ,
383- DateTime . Parse ( "9999-12-31 10:59:59.999999 " ) . ToLocalTime ( )
386+ DateTime . Parse ( "1883-11-18 21:00:00.000000 " ) . ToLocalTime ( )
384387 } ;
385388 yield return new object [ ]
386389 {
@@ -408,6 +411,9 @@ public void TestSelectDateTimeOffset(string dbValue, string dbType, DateTime? ex
408411 connection . Open ( ) ;
409412 using ( var command = connection . CreateCommand ( ) )
410413 {
414+ command . CommandText = "ALTER SESSION SET TIMEZONE = 'America/Los_Angeles'" ;
415+ command . ExecuteNonQuery ( ) ;
416+
411417 EnableStructuredTypes ( connection ) ;
412418 SetTimePrecision ( connection , 9 ) ;
413419 var rawValueString = $ "'{ dbValue } '::{ dbType } ";
@@ -450,7 +456,7 @@ internal static IEnumerable<object[]> DateTimeOffsetConversionCases()
450456 "2024-07-11 14:20:05 -7:00" ,
451457 SFDataType . TIMESTAMP_LTZ . ToString ( ) ,
452458 null ,
453- DateTimeOffset . Parse ( "2024-07-11 14:20:05 -7:00" ) . ToLocalTime ( )
459+ DateTimeOffset . Parse ( "2024-07-11 14:20:05 -7:00" )
454460 } ;
455461 yield return new object [ ]
456462 {
@@ -475,10 +481,10 @@ internal static IEnumerable<object[]> DateTimeOffsetConversionCases()
475481 } ;
476482 yield return new object [ ]
477483 {
478- "2024-07-11 14:20:05.123456789 -7 :00" ,
484+ "2024-07-11 14:20:05.123456789 -2 :00" ,
479485 SFDataType . TIMESTAMP_LTZ . ToString ( ) ,
480486 null ,
481- DateTimeOffset . Parse ( "2024-07-11 14 :20:05.1234568 -7:00" )
487+ DateTimeOffset . Parse ( "2024-07-11 09 :20:05.1234568 -7:00" )
482488 } ;
483489 yield return new object [ ]
484490 {
@@ -549,55 +555,5 @@ private void SetTimePrecision(SnowflakeDbConnection connection, int precision)
549555 command . ExecuteNonQuery ( ) ;
550556 }
551557 }
552-
553- [ Test ]
554- public void TestStructuredTypeWithTimestampLtzHonorsSessionTimezone ( )
555- {
556- using ( var connection = new SnowflakeDbConnection ( ConnectionString ) )
557- {
558- connection . Open ( ) ;
559-
560- using ( var command = connection . CreateCommand ( ) )
561- {
562- command . CommandText = "ALTER SESSION SET TIMEZONE = 'Europe/Warsaw'" ;
563- command . ExecuteNonQuery ( ) ;
564- }
565-
566- CreateOrReplaceTable ( connection , "test_struct_ltz" , new [ ]
567- {
568- "id INT" ,
569- "data OBJECT(timestamp_value TIMESTAMP_LTZ)"
570- } ) ;
571-
572- using ( var command = connection . CreateCommand ( ) )
573- {
574- command . CommandText = "INSERT INTO test_struct_ltz SELECT 1, {'timestamp_value': '2024-03-20 15:45:30'::TIMESTAMP_LTZ}" ;
575- command . ExecuteNonQuery ( ) ;
576-
577- command . CommandText = "SELECT data FROM test_struct_ltz" ;
578- using ( var reader = ( SnowflakeDbDataReader ) command . ExecuteReader ( ) )
579- {
580- Assert . IsTrue ( reader . Read ( ) ) ;
581-
582- var obj = reader . GetObject < TestObjectWithTimestampLtz > ( 0 ) ;
583-
584- var warsawTz = TimeZoneConverter . TZConvert . GetTimeZoneInfo ( "Europe/Warsaw" ) ;
585- var inputTime = new DateTime ( 2024 , 3 , 20 , 15 , 45 , 30 , DateTimeKind . Unspecified ) ;
586- var utcTime = TimeZoneInfo . ConvertTimeToUtc ( inputTime , warsawTz ) ;
587- var expectedInWarsaw = TimeZoneInfo . ConvertTimeFromUtc ( utcTime , warsawTz ) ;
588-
589- Assert . AreEqual ( expectedInWarsaw , obj . TimestampValue ,
590- "Structured type TIMESTAMP_LTZ should honor session timezone" ) ;
591- }
592- }
593- }
594- }
595-
596- [ SnowflakeObject ( ConstructionMethod = SnowflakeObjectConstructionMethod . PROPERTIES_NAMES ) ]
597- private class TestObjectWithTimestampLtz
598- {
599- [ SnowflakeColumn ( Name = "timestamp_value" ) ]
600- public DateTime TimestampValue { get ; set ; }
601- }
602558 }
603559}
0 commit comments