mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 05:31:20 +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) | ||||
|         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): | ||||
|         # It's possible that some platform maps time_t to double, | ||||
|         # 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; | ||||
| 	fraction = timestamp - (double)timet; | ||||
| 	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); | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Georg Brandl
						Georg Brandl