PDA

Ver la Versión Completa : Obtener zona horaria en window 8


ingabraham
28-08-2013, 18:53:04
tengo el siguiente codigo y me funciona bien hasta win 7

pero en el 8 no me funciona.

me carga en el combobox las zonas, como por ejemplo:

(GMT -05:: BOGOTA , LIMA, QUITO)

obtengo la zona horaria Con el sgt codigo:


//Lena el combobox que se pase como parametro con las diferentes zonas de tiempo
//que se encuentren en el registro de windows
// PRE : El query puede llegar nil si se llama del setup en ese caso asigna settings
// de la aplicacion por defecto

function TZ_FillTimeZonesComboBox(Query: TADOQuery; cmbTimeZones: TComboBox): boolean;
var LVTimeZones : TListView;
LVCreated, TZResult : boolean;
TZDSTSettings : TTZDSTSettings;
ActiveTimeZone : TimeZone;
errMsg :string;
begin
//Inicializacion de variables para evitar warnings
LVTimeZones := nil;
LVCreated := false;
try

//Inicializa el arreglo TZs con las zonas de tiempo que se encuentran
//en el registro de windows
TZ_Initialize();

LVTimeZones := TListView.Create(cmbTimeZones.Owner);
LVCreated := true;

LVTimeZones.Parent := cmbTimeZones.Parent;

//Poblar la lista de zonas de tiempo.
TZ_FillListView(LVTimeZones);

//Ordenar la lista
LVTimeZones.SortType := stText;
LVTimeZones.SortType := stNone;
TZ_OrderTimeZone(lvTimeZones,0,0);

//Ahora que está ordenada copiar dicha lista al combo. La columna que se copia
//es la de 'NAME', dado que las primeras dos son solo para efecto de ordenamiento.
TZ_FillComboFromList(LVTimeZones, cmbTimeZones);

// Obtienen los settings de DST de la aplicacion.
if not (Query = nil ) then
TZDSTSettings := TZ_GetTZDSTSEttings(Query,tzresult,errMsg);
//Si la zona de tiempo que leyo de la BD NO esta dentro de las que se encuentran en el combo
//cmbTimeZones (esto ocurre cuando se escribe en la BD en un idioma diferente al de la estación de trabajo)
//la variable cmbTimeZones.ItemIndex queda con el valor de -1
cmbTimeZones.ItemIndex := cmbTimeZones.Items.IndexOf(TZDSTSettings.TIMEZONE);

//Si NO encontró una zona de tiempo busca la del computador
if cmbTimeZones.ItemIndex=-1 then begin

// En este punto hay que saber cual es la TZ activa del sistema.
ActiveTimeZone := TZ_GetActiveTimeZone();

TZDSTSettings.TIMEZONE := ActiveTimeZone.ID;

//Ubica el combo en la zona de tiempo que indica la variable TZDSTSettings.TIMEZONE
//que deberia ser la zona de tiempo del PC
cmbTimeZones.ItemIndex := cmbTimeZones.Items.IndexOf(TZDSTSettings.TIMEZONE);

end;

LVTimeZones.Free;

result := true;
except
on e:exception do begin
result := false;

//Si creo el TListView lo libera.
if LVCreated then
LVTimeZones.Free;
end;
end;
end;