mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 21:51:50 +00:00 
			
		
		
		
	Patch #1646728: datetime.fromtimestamp fails with negative
fractional times. With unittest. Somebody please backport to 2.5.
This commit is contained in:
		
							parent
							
								
									d1287323ca
								
							
						
					
					
						commit
						2054ee9b6f
					
				
					 3 changed files with 18 additions and 0 deletions
				
			
		|  | @ -1425,6 +1425,15 @@ def test_insane_utcfromtimestamp(self): | ||||||
|             self.assertRaises(ValueError, self.theclass.utcfromtimestamp, |             self.assertRaises(ValueError, self.theclass.utcfromtimestamp, | ||||||
|                               insane) |                               insane) | ||||||
| 
 | 
 | ||||||
|  |     def test_negative_float_fromtimestamp(self): | ||||||
|  |         # The result is tz-dependent; at least test that this doesn't | ||||||
|  |         # fail (like it did before bug 1646728 was fixed). | ||||||
|  |         self.theclass.fromtimestamp(-1.05) | ||||||
|  | 
 | ||||||
|  |     def test_negative_float_utcfromtimestamp(self): | ||||||
|  |         d = self.theclass.utcfromtimestamp(-1.05) | ||||||
|  |         self.assertEquals(d, self.theclass(1969, 12, 31, 23, 59, 58, 950000)) | ||||||
|  | 
 | ||||||
|     def test_utcnow(self): |     def test_utcnow(self): | ||||||
|         import time |         import time | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -404,6 +404,9 @@ Library | ||||||
| Extension Modules | Extension Modules | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  | - Patch #1646728: datetime.fromtimestamp fails with negative | ||||||
|  |   fractional times.  With unittest. | ||||||
|  | 
 | ||||||
| - Patch #1490190: posixmodule now includes os.chflags() and os.lchflags() | - Patch #1490190: posixmodule now includes os.chflags() and os.lchflags() | ||||||
|   functions on platforms where the underlying system calls are available. |   functions on platforms where the underlying system calls are available. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -3683,6 +3683,12 @@ 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 (us < 0) { | ||||||
|  | 		/* Truncation towards zero is not what we wanted
 | ||||||
|  | 		   for negative numbers (Python's mod semantics) */ | ||||||
|  | 		timet -= 1; | ||||||
|  | 		us += 1000000; | ||||||
|  | 	} | ||||||
| 	/* If timestamp is less than one microsecond smaller than a
 | 	/* If timestamp is less than one microsecond smaller than a
 | ||||||
| 	 * full second, round up. Otherwise, ValueErrors are raised | 	 * full second, round up. Otherwise, ValueErrors are raised | ||||||
| 	 * for some floats. */ | 	 * for some floats. */ | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Guido van Rossum
						Guido van Rossum