"Today, right now, at 1200 GMT the martial law ends. This is my principal decision," Poroshenko said during a live-streamed military cabinet meeting in Kiev.
The president said he had reached the decision "based on analysis of all the components of the security situation in the country".
The move to impose martial law came after Poroshenko warned of a build-up of Russian forces near Ukraine's borders, escalating the most dangerous crisis in years between the ex-Soviet neighbours.
Russian border patrol boats fired on, boarded and seized the three Ukrainian vessels, along with 24 sailors, in November off the coast of Crimea.
Russia seizes three Ukrainian naval ships off Crimea
Western governments accused Russia of acting illegally and US President Donald Trump cancelled a meeting with Vladimir Putin at the G20 summit in Buenos Aires over the incident.
"The support and concrete actions of our international partners — their pressure on the Kremlin combined with a martial law — have stopped the worst scenario that the Russian Federation planned," Poroshenko said.
"They didn't let Putin cross the new red line," he added.
The martial law was imposed in 10 regions, including areas close to territories controlled by Russia-backed rebels in the east of the country and the Sea of Azov's coast.
COMMENTS
Comments are moderated and generally will be posted if they are on-topic and not abusive.
For more information, please see our Comments FAQ