mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	Bug #1478429: make datetime.datetime.fromtimestamp accept every float,
possibly "rounding up" to the next whole second.
This commit is contained in:
		
							parent
							
								
									6a907d8b8e
								
							
						
					
					
						commit
						6d78a582ec
					
				
					 2 changed files with 13 additions and 0 deletions
				
			
		|  | @ -1400,6 +1400,12 @@ def test_utcfromtimestamp(self): | ||||||
|         got = self.theclass.utcfromtimestamp(ts) |         got = self.theclass.utcfromtimestamp(ts) | ||||||
|         self.verify_field_equality(expected, got) |         self.verify_field_equality(expected, got) | ||||||
| 
 | 
 | ||||||
|  |     def test_microsecond_rounding(self): | ||||||
|  |         # Test whether fromtimestamp "rounds up" floats that are less | ||||||
|  |         # than one microsecond smaller than an integer. | ||||||
|  |         self.assertEquals(self.theclass.fromtimestamp(0.9999999), | ||||||
|  |                           self.theclass.fromtimestamp(1)) | ||||||
|  | 
 | ||||||
|     def test_insane_fromtimestamp(self): |     def test_insane_fromtimestamp(self): | ||||||
|         # It's possible that some platform maps time_t to double, |         # It's possible that some platform maps time_t to double, | ||||||
|         # and that this test will fail there.  This test should |         # and that this test will fail there.  This test should | ||||||
|  |  | ||||||
|  | @ -3683,6 +3683,13 @@ datetime_from_timestamp(PyObject *cls, TM_FUNC f, double timestamp, | ||||||
| 		return NULL; | 		return NULL; | ||||||
| 	fraction = timestamp - (double)timet; | 	fraction = timestamp - (double)timet; | ||||||
| 	us = (int)round_to_long(fraction * 1e6); | 	us = (int)round_to_long(fraction * 1e6); | ||||||
|  | 	/* If timestamp is less than one microsecond smaller than a
 | ||||||
|  | 	 * full second, round up. Otherwise, ValueErrors are raised | ||||||
|  | 	 * for some floats. */ | ||||||
|  | 	if (us == 1000000) { | ||||||
|  | 		timet += 1; | ||||||
|  | 		us = 0; | ||||||
|  | 	} | ||||||
| 	return datetime_from_timet_and_us(cls, f, timet, us, tzinfo); | 	return datetime_from_timet_and_us(cls, f, timet, us, tzinfo); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Georg Brandl
						Georg Brandl