Приложения Heroku работают в обычной системе unix, и у вас есть все файлы zoneinfo. Я также уверен, что они актуальны.
Что касается unix, вы можете установить Tv env var с чем-то вроде:
$ heroku config:set TZ=Europe/Berlin
Вы можете видеть действительные имена зоныinfo с помощью:
$ heroku run find /usr/share/zoneinfo/posix
Вообще говоря, вы хотите запустить приложение в среде UTC и обрабатывать часовые пояса внутри, возможно, обрабатывать локальное время на пользователь на основе пользователя.
Я подозреваю, что это может не полностью ответить на ваш вопрос. Возможно, вам захочется расширить то, что именно вы пытаетесь достичь, и как вы его пытаетесь достичь, а также то, как вы наблюдаете эффект «на час меньше, чем местный».
Если Ваша переменная объема файла не является статической, то можно использовать объявление что экстерн использования во вложенном объеме:
int c;
int main() {
{
int c = 0;
// now, c shadows ::c. just re-declare ::c in a
// nested scope:
{
extern int c;
c = 1;
}
// outputs 0
printf("%d\n", c);
}
// outputs 1
printf("%d\n", c);
return 0;
}
, Если переменная объявляется с помехами, я не вижу способ относиться к нему.
Существует нет:: в c, но можно использовать функцию метода get
#include <stdio.h>
int L=3;
inline int getL()
{
return L;
}
int main();
{
int L = 5;
printf("%d, %d", L, getL());
}
Если Вы говорите о затененном глобальном var, то (на Linux) можно использовать dlsym()
для нахождения адреса глобальной переменной, как это:
int myvar = 5; // global
{
int myvar = 6; // local var shadows global
int *pglob_myvar = (int *)dlsym(RTLD_NEXT, "myvar");
printf("Local: %d, global: %d\n", myvar, *pglob_myvar);
}
, Если Вы хотите, чтобы Ваш код выглядел сексуальным, используйте макрос:
#define GLOBAL_ADDR(a,b) b =(typeof(b))dlsym(RTLD_NEXT, #a)
...
int *pglob_myvar;
GLOBAL_ADDR(myvar, pglob_myvar);
...
В зависимости от того, что Вы называете экранированная глобальная переменная в C, различные ответы возможны.
, Если Вы имеете в виду глобальную переменную, определенную в другом исходном файле или связанной библиотеке, только необходимо объявить это снова с extern
префикс:
extern int aGlobalDefinedElsewhere;
, Если Вы имеете в виду затененную глобальную переменную (или затмеваемый, выберите терминологию, которую Вы предпочитаете) локальной переменной того же имени), нет никакого встроенного способа сделать это в C. Таким образом, Вы не должны или делать этого или работать вокруг этого. Возможные решения:
метод get/метод set функционирует для доступа к глобальной переменной (который является хорошей практикой, в особенности в многопоточных ситуациях)
псевдонимы к globals посредством указателя, определенного перед локальной переменной:
int noName;
{
int * aliasToNoName = &noName; /* reference to global */
int noName; /* declaration of local */
*aliasToNoName = noName; /* assign local to global */
}
что такое "экранированная глобальная переменная" в чистом C?
в C у Вас есть локальные переменные, файл локальные / глобальные переменные (статические) и глобальные переменные (экстерн)
so file1.c:
int bla;
file2.c
extern int bla;