The eastbound train was forced to stop outside Unity, Sask., about 175 kilometres west of Saskatoon, around 11 a.m. CT Thursday.
And it stayed there amid blizzard-like conditions until about 9 a.m. Friday.
The train was heading from Vancouver toward Saskatoon and then on to Toronto. It will be resupplied by another Via train.
A passenger, contacted by cell phone, said the train had to stop because another train on the tracks had broken down and bad weather had delayed getting a repair crew out.
Travel in Saskatchewan has been difficult because of blowing snow and large, hard-packed snowdrifts since Wednesday night.
Passenger Martin Wooldridge said that after 21 hours on board the stalled train, food and water were still available. But he said people were tired of waiting.
"We're all frustrated, you know," Wooldridge told CBC Friday morning. "A simple train journey seems to have turned into cruel and unusual punishment."
A CN spokesperson said several freight trains had to be stopped because of the weather and that meant the Via train couldn't proceed.
Crews have been working throughout the night, the spokesperson said.
Wooldridge, who is originally from from Edenwold, Sask., had been in Kamloops, B.C. for the last couple of months.
He was headed to Melville, Sask., and was expecting to arrive there by noon on Thursday.
"It's totally disappointing," Wooldridge said.