Garcia was signed by former City manager Roberto Mancini from Benfica in 2012, but he never became a regular starter for the Italian or his successor Manuel Pellegrini.
The 27-year-old is reported to have cost Zenit £12m and he will link up with former Tottenham manager Andre Villas-Boas at the Petrovsky Stadium.
"Spanish midfielder Javi Garcia has left City to join Zenit St. Petersburg on a permanent basis," a statement on City's website confirmed.
Garcia won both the Premier League and League Cup with City last season and leaves Eastlands after 71 appearance over the past two years.
His departure follows the £10m exit of fellow midfielder Jack Rodwell to Sunderland earlier this month. City effectively already have a replacement for Garcia in the squad having signed Fernando from Porto in June.
Eliaquim Mangala, Willy Caballero, Frank Lampard, Bruno Zuculini and Bacary Sagna are the other new faces in the English champions' squad ahead of the new season.
City begin the defence of their English Premier League crown at Newcastle on Sunday.