Suggestion from an Amateur Programmer
I only know a very basic amount of programming, and I am not remotely familiar with the code of this game, but perhaps the devs could try this:
First establish a referenceable digital clock(that states the actual time)that the devs have checked to be accurate for their time repeatedly for a week and runs independently of the game . Once the clock has been established as accurate connect it to the server, and apply it to the times like this: upon the confirmation of each started upgrade/build a start value is transmitted and recorded on the server with the time on the independent clock at the time of sending attached to the value. The server would then perform a very basic calculation as to the end time(this part I would know how to do) by taking the start value's time from the independent clock and adding the predetermined time of the upgrade to the time value to achieve the end value. One would obtain the time remaining by subtracting the current time from the end time (I'm assuming that the numbers for time would be applied chronologically{minute one value 60, minute two value 120...}). The upgrade/build would end when the independent clock reaches the end value.
Take an example(avoid this if you have trouble with math or computing) :
I start my x-bow(seven day build) at noon on 1/1/2014, the start value would be say(these are arbitrary numbers) day 01012014 hour 120000, and the server would determine the end value as 1/8/2014(American dating style) or day 01082014 hour 120000 and when the clock read that it would be done. Say I check at noon on the second it would subtract day and hour values 01022014 and 120000 from day and hour value 01082014 and 120000 to obtain day and hour value 00060000 and hour value 000000 which would read as six days.
From what I understand about computing this would not be very difficult to implement with proper syntax (which I don't have) . The biggest possible error I see in this is the inherent delay from the transmission from the gaming device to the server which would cause a very difficult to remove fixed delay(unlikely to be more than a few seconds) on all builds/ upgrades.
As I said before I know only a basic amount of programming, and even less about the processes of this game, but I see this as a very effective theoretically logical solution. I would love to hear from a dev or the words of a dev if this or something similar would be a proper solution, or if not what is wrong with it.