In a video posted to Twitter, Witzel said he had started feeling unwell Friday, with a fever, sore throat and loss of smell, a key symptom of the virus.
"Today, the test result came back positive... Now, thank God, I'm feeling better, and will continue working while following my doctors' advice," said Witzel, 52.
"I ask you once again to stay at home, because this disease, as everyone can see, spreads quickly and doesn't spare anyone."
Along with Sao Paulo Governor Joao Doria, Witzel has been one of the leading proponents for closing non-essential businesses and ordering people to stay home to slow the spread of the disease.
On Monday he extended Rio de Janeiro's stay-at-home measures until April 30.
Those policies have been attacked by Bolsonaro, who accuses them of needlessly wrecking Latin America's biggest economy over a disease the far-right president has compared to a "little flu".
Witzel fired back last month that Bolsonaro's defiance of guidelines from the United Nations and World Health Organization could be considered a "crime against humanity".
Rio de Janeiro state, home to 16 million people, has registered 224 deaths from the virus so far, second only to Sao Paulo.
Brazil, the Latin American country hit hardest by the pandemic, has registered more than 1,300 deaths. (AFP) SMNSMN