boolean gotTime = getTime(); // returns TRUE if timestamp was created successfully
if (gotTime) { // == 1, then the timestamp was created successfully
strcat(tweet, timestamp);
strcat(tweet, " as of ");
} // ELSE returned 0, send tweet w/o timestamp
strcat(tweet, "!");
Suppose that getTime() populate timestamp, and did return true. It obviously does return true because the tweet contains "as of" in your output. So, apparently, getTime() is not populating timestamp. But, even if you correct that, why would you want to tweet something like
We're open 12:45:00 as of !
?
The order of strcat() calls is wrong.
In getTime(), populating timestamp happens only if Udp.parsePacket() returns true. You have no serial output in the if block, but the fact that the timestamp after the end of the block is empty is proof that Udp.parsePacket() returned false.
So, you need to determine if you can, from where you are in the network, actually reach that time server.