He scored one run fewer than Brendon McCullum???s 117, but New Zealand’s innings fell apart when he was dismissed in the 31st over and they stumbled to a disappointing 248 all out.
Dilshan made light work of the run-chase, putting on 50-partnerships with every top-order batsman before he fell late on.
He and Dimuth Karunaratne (21) started very positively, as did Kumar Sangakkara, with a brisk 38 off 41 balls after Karunaratne fell lbw to Nathan McCullum.
Dilshan brought up his century with a wonderful cover drive for his 13th of 17 boundaries in his innings.
And after reaching his hundred, he set about finishing the game in a hurry, belting Adam Milne for three boundaries in the 45th over but was gone the next over.
Matt Henry (2-34), who was the pick of the New Zealand bowlers though not in their World Cup squad, had him caught by wicketkeeper Luke Ronchi from a short ball.
That left captain Angelo Mathews (39no) to finish the job with 14 balls to spare, sealing the win with a fine pull shot to the boundary.
McCullum continued his fine form against the Sri Lankans following his 195 in the first Test and 51 in the first ODI, both at Christchurch. He scored a blistering hundred off just 88 balls.
New Zealand were well placed at 158-2 after 30 overs before he was out caught and bowled by Jeevan Mendis, but considering he had accounted for 117 of those runs, it gave an insight into the struggles of his teammates ??? although four wickets were their own downfall, all run-outs.
Ross Taylor (34) was the only other batsman to pass 20 but his innings was from a rather pain-staking 69 balls.
The home side managed only 90 runs from the final 20 overs and much of that was down to some late hitting from numbers 10 and 11, Matt Henry (20) and Trent Boult (13).
Their disappointing total proved decisive as Sri Lanka won with ease to tie the seven-match series at 1-1.