Я сэкономлю Вам время и скажу Вам, что нет никакого пути в надлежащем .net, версия 2.0 для получения объекта DateTime для другого часового пояса, отличающегося от того, на котором программное обеспечение работает (кроме UTC).
Однако, который не означает, нет способа сделать это за пределами .net. Смотрите здесь в классе TimeZoneInformation. Этот класс обертывает некоторый материал p/invoke к Победе O/S для получения информации часового пояса от O/S. Я успешно использовал его назад, когда 2.0 было новым, и это работало очень хорошо. Сайт я продолжал работать, должен был быть в состоянии показать каждую дату/время, локальную для пользователя, и должен был быть осведомлен о DST, и этот класс подошел для нас.
Для такого рода вещей мне нравится использовать Curses . Это просто не для Perl. :)
Вы говорите о том, чтобы получить больший контроль над тем, где что печатается на вашем экране? Тогда вы, вероятно, захотите проверить модуль Term :: Cap .
Бедняк может сделать это с одной строкой, используя \ r
, чтобы перезаписать ту же строку.
while ($t>0) {
# note no new line at the end of printf statement
printf "\rHours: %d Minutes: %d Seconds: %d ", $t/3600, ($t/60)%60, $t/60;
sleep 5;
$t -= 5;
}
EDIT Вот кое-что, что работает в моей системе. Возможности вашего терминала могут отличаться.
require Term::Cap;
$terminal = Tgetent Term::Cap { TERM => cygwin, OSPEED => 9600 };
$terminal->Trequire("up"); # move cursor up
$UP = $terminal->Tputs("up");
$t = 500;
while ($t > 0) {
printf "Hour: %d \n", $t/3600;
printf "Minute: %d \n", ($t/60)%60;
printf "Second: %d \n", $t%60;
print $UP,$UP,$UP;
sleep 5;
$t -= 5;
}
Примерно так:
use Term::ANSIScreen qw(cls);
while(1) {
cls;
print "....";
sleep 5;
}
Альтернативы "cls" можно найти в этом вопросе .