The Tinkoff-Saxo rider claimed his first win of the season after a bunch sprint at the end of the 210km stage from Rieti to Porto Sant'Elpidio.
Sagan had previously recorded two second-place finishes in this year's Tirreno and 15 runner-up spots so far this season. His last big celebration was winning the Green jersey at the 2014 Tour de France.
He finished ahead of Gerald Ciolek (MTN-Qhubeka) and Jens Debusschere (Lotto Soudal).
I don't know about frustrating. All these second places, I wanted to win," said Sagan. But I don't know how many second places I did. It would have been a lot of first places.
"But I take it as experience. Life is like that. Sometimes up, sometimes down. It's OK."
(Movistar's Nairo Quintana looks set for the overall victory - Tirreno-Adriatico)
Quintana (Movistar) continues to lead the overall standings, ahead of Bauke Mollema (Trek Factory Racing) and Rigoberto Uran (Etixx-QuickStep).
"It was obvious that my rivals would try something on a day of such difficult conditions, with limited visibility and communication, especially if they had seen any weakness," Quintana said.
"The weather was dreadful all day. It didn't serve anyone's purposes, and that is another factor that could have lost me the race lead. But luckily all went well, as we wanted, and we all finished in the same time.
"Tomorrow's stage has to be raced with maximum speed. There won't be any secrets and no place to hide. I think the advantage that I have is enough."
Alessandro Vanotti (Astana), Stijn Devolder (Trek Factory Racing) and Yukiya Arashiro (Europcar) broke clear after 15km and built a lead of nearly six mminutes before the peloton got to work.
The Tinkoff-Saxo team upped the pace on the ascent up to Montelparo, the sole categorized climb of the day, cutting the time gap to 1min 34sec.
The three leaders were caught with 51km remaining before Vanotti broke again and established a lead of 25 seconds as he approached Porto Sant'Elipidio before the two final laps of 14.4km.
Alexis Vuillermoz (AG2R) left the peloton and bridged the gap to Vanotti, with the two building a lead of 30 seconds. The Frenchman then left Vanotti alone but was reeled in with 3.2km to go as the teams set up their riders for the sprint finish.
Toward the finish Sagan opened his sprint at the same time as Ciolek and quickly opened up a lead of a bike length before crossing the finish.
Stage 6: 210km, Rieti - Porto Sant'Elpidio
1 Peter Sagan (SVK) Tinkoff-Saxo 5hr 4min 13sec
2 Gerald Ciolek (GER) MTN-Qhubeka
3 Jens Debusschere (BEL) Lotto-Soudal
4 Magnus Cort Nielsen (DEN) Orica-GreenEDGE
5 Maximiliano Richeze (ARG) Lampre-Merida
6 Edvald Boasson Hagen (NOR) MTN-Qhubeka
7 Nikias Arndt (GER) Giant-Alpecin
8 Sam Bennett (IRL) Bora-Argon 18
9 Ramunas Navardauskas (LTU) Cannondale-Garmin
10 Alexey Lutsenko (KAZ) Astana
1 Nairo Quintana (COL) Movistar Team 24hr 58min 58sec
2 Bauke Mollema (NED) Trek Factory Racing 0:00:39
3 Rigoberto Uran (COL) Etixx-QuickStep 0:00:48
4 Thibaut Pinot (FRA) FDJ.fr 0:00:57
5 Alberto Contador (ESP) Tinkoff-Saxo 0:01:03
6 Adam Yates (GBR) Orica-GreenEDGE 0:01:04
7 Domenico Pozzovivo (ITA) AG2R 0:01:06
8 Joaquim Rodriguez (ESP) Katusha 0:01:07
9 Stephen Cummings (GBR) MTN-Qhubeka 0:01:12
10 Wouter Poels (NED) Sky 0:01:13