The 27-year-old, who only spent two seasons at the Etihad, has signed a five-year deal with the Russian club.
The clubs had agreed a fee of €15 million for the Spanish international, which could rise to €16m, depending on the Russian side's success.
And after completing a medical and agreeind terms with the Russian Premier League runners-up, the former Benfica midfielder was confitmed a Zenit player by the club's official Twitter account.
Garcia was signed by Roberto Mancini in 2012, joining the Premier League champions for €20m as they looked to consolidate in the centre of the park.
However, the holding midfielder struggled to hold down is place in the starting line-up, making just 17 starts in the league under the Italian.
Things failed to improve under new boss Manuel Pellegrini last season, as he made just 14 starts in the Premier League, and with Fernando being brought in from Porto, playing time for Garcia looked to be at a premium in 2014-15.
The Spaniard scored twice during his time at City, including a strike against Stoke on his debut, with the other coming against Newcastle.