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 to a fee of 15 million euros for the Spanish international, which could rise to 16 million euros, depending on the Russian side's success.
And after completing a medical and coming to terms with the Russian Premier League runner-up, the former Benfica midfielder was confirmed as a Zenit player by the club's Twitter account.
Garcia was signed by Roberto Mancini in 2012, joining the Premier League champion for 20 million euros as it looked to strengthen in the center of the park.
However, the holding midfielder struggled to hold down his place in the starting lineup, 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.