He said this would enable a new government to confront Spain's economic problems from January.
Hours earlier, a credit rating agency warned it might downgrade Spain's rating due to weak growth prospects.
The opposition has demanded an early vote since May, when Mr Zapatero's Socialist Party lost in local polls.
"Early elections are what the majority of the electorate wanted, so this is good news," said Mariano Rajoy, the candidate of the main opposition Popular Party.
Continue reading the main story
“
Start Quote
I want a new government to take control of the economy from 1 January next year... fresh from the balloting”
Jose Luis Rodriguez Zapatero
Eurozone in crisis graphics
It argues that a change of government is the only way to recover market confidence in the country.
Mr Zapatero will not be seeking a third term as prime minister, and opinion polls suggest his Socialist Party - led by former Interior Minister Alfredo Perez Rubalcaba - will lose.
Economic recovery?
The government's borrowing costs have risen in recent weeks, despite agreement on a second EU bailout package for Greece, reflecting the fact that investors still worry about the weak state of Spain's economy, says the BBC's Sarah Rainsford in Madrid.
Mr Zapatero said he was calling an early election - now set for 20 November - in order to "project political and economic certainty" over the months to come.
"I want a new government to take control of the economy from 1 January next year... fresh from the balloting."
He made his announcement after a speech in which he stressed that the economy was on the road to recovery, citing seven consecutive quarters of growth, and a recent decline in unemployment.
But 46% of young Spaniards remain out of work - and the overall unemployment rate is twice the European average.
There is concern too over the level of debt in Spain's regions, and the health of the banking sector, our correspondent says.
The international ratings agency, Moody's, has just warned that it is putting Spanish government debt on review, for a possible downgrade from Aa2 to Aa3.