@@ -345,36 +345,28 @@ cpdef int64_t tz_convert_single(int64_t val, tzinfo tz1, tzinfo tz2):
345
345
converted: int64
346
346
"""
347
347
cdef:
348
- int64_t utc_date
349
348
int64_t arr[1 ]
349
+ bint to_utc = is_utc(tz2)
350
+ tzinfo tz
350
351
351
352
# See GH#17734 We should always be converting either from UTC or to UTC
352
- assert is_utc(tz1) or is_utc(tz2)
353
+ assert is_utc(tz1) or to_utc
353
354
354
355
if val == NPY_NAT:
355
356
return val
356
357
357
- # Convert to UTC
358
- if is_tzlocal(tz1):
359
- utc_date = _tz_convert_tzlocal_utc(val, tz1, to_utc = True )
360
- elif not is_utc(tz1):
361
- arr[0 ] = val
362
- utc_date = _tz_convert_dst(arr, tz1, to_utc = True )[0 ]
358
+ if to_utc:
359
+ tz = tz1
363
360
else :
364
- utc_date = val
361
+ tz = tz2
365
362
366
- if is_utc(tz2 ):
367
- return utc_date
368
- elif is_tzlocal(tz2 ):
369
- return _tz_convert_tzlocal_utc(utc_date, tz2 , to_utc = False )
363
+ if is_utc(tz ):
364
+ return val
365
+ elif is_tzlocal(tz ):
366
+ return _tz_convert_tzlocal_utc(val, tz , to_utc = to_utc )
370
367
else :
371
- # Convert UTC to other timezone
372
- arr[0 ] = utc_date
373
- # Note: at least with cython 0.28.3, doing a lookup `[0]` in the next
374
- # line is sensitive to the declared return type of _tz_convert_dst;
375
- # if it is declared as returning ndarray[int64_t], a compile-time error
376
- # is raised.
377
- return _tz_convert_dst(arr, tz2, to_utc = False )[0 ]
368
+ arr[0 ] = val
369
+ return _tz_convert_dst(arr, tz, to_utc = to_utc)[0 ]
378
370
379
371
380
372
def tz_convert (int64_t[:] vals , tzinfo tz1 , tzinfo tz2 ):
@@ -392,14 +384,22 @@ def tz_convert(int64_t[:] vals, tzinfo tz1, tzinfo tz2):
392
384
int64 ndarray of converted
393
385
"""
394
386
cdef:
395
- int64_t[:] utc_dates, converted
387
+ int64_t[:] converted
388
+ bint to_utc = is_utc(tz2)
389
+ tzinfo tz
390
+
391
+ # See GH#17734 We should always be converting either from UTC or to UTC
392
+ assert is_utc(tz1) or to_utc
396
393
397
394
if len (vals) == 0 :
398
395
return np.array([], dtype = np.int64)
399
396
400
- # Convert to UTC
401
- utc_dates = _tz_convert_one_way(vals, tz1, to_utc = True )
402
- converted = _tz_convert_one_way(utc_dates, tz2, to_utc = False )
397
+ if to_utc:
398
+ tz = tz1
399
+ else :
400
+ tz = tz2
401
+
402
+ converted = _tz_convert_one_way(vals, tz, to_utc = to_utc)
403
403
return np.array(converted, dtype = np.int64)
404
404
405
405
0 commit comments