Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec) - oder andere Länderformate Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec) - oder andere Länderformate

06 May 2020, 11:13

An die Freunde von AutoHotkey,

suche eine Möglichkeit, im Code weiter unten das Datumsformat umzustellen.
Vom Deutschen ins Englische Format.

Der Code schreibt in die Betreffzeile von Outlook - ausgelöst durch STRG + R - das Datum von Morgen und springt am Freitag auf Montag.
Das soll weiter so bleiben.

Der Code schreibt
Reply 07-Mai //

Gewünscht ist
Reply 07-May //

Also statt (DEUTSCH) Jan, Feb, Mär, Apr, Mai, Jun, Jul, Aug, Sep, Okt, Nov, Dez
Gewünscht (ENGLISCH) Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec

Dabei möchten die Einstellungen in Windows 10 unter Region bzw Reginonales Format nicht berührt werden.
Stattdessen wünsche ich mir die Anpassung im Code.

Danke im Voraus für die freundliche Hilfe.

Code: Select all

#IfWinActive, ahk_class rctrl_renwnd32 	; ahk_class zu finden über Window Spy - steht für ein neues geöffnetes E-Mail Fenster unter Outlook 2016
~^r::								; STRG + R

Heute = %A_Now%						; Schreibe das aktuelle Datum in die Variable Morgen
Wochentag := A_WDay 					; Der aktuelle 1-stellige Wochentag (1-7). 1 ist Sonntag in allen Sprach- und Regionseinstellungen.

If (Wochentag = 6) 						; Freitag
   AddiereTage := 3
Else If (Wochentag = 7)					; Samstag
   AddiereTage := 2	
Else
   AddiereTage := 1 						; So, Mo, Di, Mi, Do

EnvAdd, Heute, AddiereTage, Days 			; AddiereTage auf das aktuelle Datum
FormatTime, Heute, %Heute%, dd-MMM		; Formatiere die Datumsanzeige wie folgt: 10.07.2019

Send, Reply %Heute% //{Space}				; Gibt das Ergebnis aus und und hänge // mit Leerzeichen dahinter

Heute =								; Variable Morgen löschen
AddiereTage = 							; Variable AddiereTage löschen

return
 
; Der Befehl return schließt das Makro ab und beendet hier die Skriptausführung. 
; In einem Skript, das nur aus dem gezeigten Hotstring besteht, wäre er überflüssig. 
; In der Regel definiert man in einem Skript aber mehrere Hotstrings oder Hotkeys. 
; Technisch sind diese nichts anderes als Labels, also Sprungmarken. 
; Ohne das return würde das Skript einfach weiterlaufen und den zum nächsten Eintrag gehörenden Code auch noch ausführen.
Last edited by Jakobus on 07 May 2020, 06:24, edited 1 time in total.
User avatar
LuckyJoe
Posts: 335
Joined: 02 Oct 2013, 09:52

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)  Topic is solved

06 May 2020, 13:12

Hi,

du kannst den Sprachcode bei der Zeitformatierung verwenden:

FormatTime, Heute, L0x0809, dd-MMM

Language Codes: https://www.autohotkey.com/docs/misc/Languages.htm
Herzliche Grüße aus dem Rheinland
Lucky Joe
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)

06 May 2020, 15:11

Die Language_Code-Option ist schon reichlich elegant! Super :thumbup:
Hatte das etwas rustikaler über ein objArray versucht ... (function für beliebigen Sprachwechsel anbei)

Code: Select all

#SingleInstance, Force

mObj		:= {"Mär" : "Mar", "Mai" : "May", "Okt" : "Oct", "Dez" : "Dec"}

date := A_Now
wDay := A_WDay
Random, addDays, 1, 3
EnvAdd, date, addDays, Days

FormatTime, dd,% date, dd-MMM
MsgBox % "Reply " . StrReplace(dd, SubStr(dd,-2), ObjRawGet(mObj, SubStr(dd,-2))) . "// "

FormatTime, dd,% date " L0x0809", dd-MMM
MsgBox % "Reply " . dd . "// "

MsgBox % lngTime(date,"dd-MMM")        		; the PCs language setting is used by default if language parameter gets omited. But TBH, this renders this function useless.
MsgBox % lngTime(date,"dd-MMM","en")        ; the date format will use English
MsgBox % lngTime(date,"dd-MMM","ja")        ; the date format will use Japanese

lngTime(date,format,lng:="local") {											                            ; https://www.autohotkey.com/docs/misc/Languages.htm
	lngObj		:= {"local" : A_Language, "en" : "0809","de" : "0407","ja" : "0411"}					; creating language object array, leading '0' gets omitted (!?), therefore labled as a string.
	FormatTime, res,% date " L0x" . ObjRawGet(lngObj, lng),% format
	Return res
}
[Edited language/country acronym (from "jp" to "ja") as advised by gerry below] :thumbup:
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)

07 May 2020, 01:56

danke für scripts
@BoBo , eine Frage : bei japanisch zeigt mir Monatszahl an ( 5 )
hier steht dass LanguageCode = ja heisst ( statt jp ) , funktioniert aber auch nicht
https://www.science.co.il/language/Locale-codes.php

hmm... bei mir fehlt was , hier Finland = OK , Japan= leer

Code: Select all

Time := A_Now
FormatTime,suomi, %time% L1035, dddd MMMM dd-MM-yyyy  ;-- SF 1035 suomi finland
FormatTime,here , %time%      , dddd MMMM dd-MM-yyyy  ;
msgbox,Language-Code Suomi Finland 1035 = %suomi%`nLanguage-Code here %a_language% = %here%
;--------------------------------------------------------
FormatTime,japan, %time% L0411, dddd MMMM dd-MM-yyyy  ;-- 
FormatTime,here , %time%      , dddd MMMM dd-MM-yyyy  ;
msgbox,Language-Code Japan 0411 = %japan%`nLanguage-Code here %a_language% = %here%
return
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)

07 May 2020, 02:33

Die Kürzel (de,en,jp) habe ich einfach willkürlich gewählt, um eine Zuordnung im objArray vornehmen zu können. Da es, laut deiner Liste, offensichtlich fixe Definitionen dsbzgl gibt, sollte man/frau diese dann auch bevorzugt verwenden. Damit wären Wissende in der Lage täglich dutzende Male beliebige Sprachen nachzutragen! :P
Quasi eine Sprach-Olympiade :lol:

Wie in der AHK-Hilfe zur Language_Code Tabelle angegeben, retourniert die Variable A_Language den der lokal verwendeten Spracheinstellung entsprechenden vierstelligen Code. Eine (Rückwärts)referenzierung über einen String wie "Arabic_Jordan" (oder ein etwaiges Kürzel) findet per default IMHO nicht statt. Und was das Retournieren von "brauchbaren" Konvertierungen betrifft - falls es im Japanischen keine Entsprechung für den Deutschen "Mai" gibt, wird hier (so steht zu vermuten) die Monatszahl stattdessen übergeben. Evtl, hängt dies aber auch mit meiner AHK-Version zusammen, falls hier Zeichen dargestellt werden sollen die deren Interpreter per default nicht interpretiert?? TBH, I don't know!

8-)

PS. Interessant wäre es zu erfahren, warum die führende Null des Language-Codes, retourniert aus dem objArray, abgeschnitten wird.
Wird stattdessen die 'A_Language'-Variable verwendet bleibt deren vierstelliger Code (mit ebenfalls führender Null) unversehrt. Irgendwie schräg.

@gerry
In der Zeile für Japan das language_code-setting von L0411 nach L0x0411 wechseln?
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)

07 May 2020, 03:46

Moin @BoBo,

in AHK 1.1 wird der Inhalt von (fast?) allen AHK-Variablen intern als String gekennzeichnet. Führende Nullen verschwinden erst, wenn man mit den Werten rechnet.

AHK 1.1 Arrays dagegen legen alle Werte, die als Integerwert interpretiert werden können, als 'Integer Key' an und enfernen dabei 'unnütze' führende Nullen.
garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)

07 May 2020, 05:55

@BoBo
@just me
danke
Die Kürzel (de,en,jp) habe ich einfach willkürlich gewählt, um eine Zuordnung im objArray vornehmen zu können.
...
In der Zeile für Japan das language_code-setting von L0411 nach L0x0411 wechseln?
es funktioniert jetzt ... d.h language Code mit führenden Nullen so verwenden > L0x0457 ( statt L0457 ) .... wobei die anderen Beispiele hatten auch führende Nullen (?)

Code: Select all

Time := A_Now
FormatTime,konkani, %time% L0x0457, dddd MMMM dd-MM-yyyy  ;
FormatTime,here   , %time%        , dddd MMMM dd-MM-yyyy  ;
msgbox,Language-Code Konkani-Goa  = %konkani%`nLanguage-Code here %a_language% = %here%
... irgendwie 'confused ' ...

Code: Select all

;- https://www.autohotkey.com/docs/misc/Languages.htm
;- https://www.science.co.il/language/Locale-codes.php
time=20201005140012
FormatTime,japan        , %time% L0x0411, dddd MMMM dd-MM-yyyy  ;-- 
FormatTime,konkani      , %time% L0x0457, dddd MMMM dd-MM-yyyy  ;
FormatTime,US_en        , %time% L0x0409, dddd MMMM dd-MM-yyyy  ;
FormatTime,Frysland     , %time% L0x0462, dddd MMMM dd-MM-yyyy  ;
FormatTime,Nederland    , %time% L0x0413, dddd MMMM dd-MM-yyyy  ;
FormatTime,Afrikaans    , %time% L0x0436, dddd MMMM dd-MM-yyyy  ;
FormatTime,Luxemburg_de , %time% L0x1007, dddd MMMM dd-MM-yyyy  ;
FormatTime,Luxemburg_de2, %time% L1007  , dddd MMMM dd-MM-yyyy  ;  <<< falsch
FormatTime,Luxemburg_fr , %time% L0x140c, dddd MMMM dd-MM-yyyy  ;
FormatTime,Luxemburg_fr2, %time% L140c  , dddd MMMM dd-MM-yyyy  ;  <<< falsch
FormatTime,Finland      , %time% L0x1035, dddd MMMM dd-MM-yyyy  ;  <<< falsch
FormatTime,Finland_2    , %time% L1035  , dddd MMMM dd-MM-yyyy  ;

msgbox,,VALUES, % ""
    . "japan=" . japan . "`n"
    . "konkani=" . konkani . "`n"
    . "US_en=" . US_en . "`n"
    . "Frysland=" . Frysland . "`n"
    . "Nederland=" . Nederland . "`n"
    . "Afrikaans=" . Afrikaans . "`n"
    . "Luxemburg_de=" . Luxemburg_de . "`n"
    . "Luxemburg_de2=" . Luxemburg_de2 . "`n"
    . "Luxemburg_fr=" . Luxemburg_fr . "`n"
    . "Luxemburg_fr2=" . Luxemburg_fr2 . "`n"
    . "Finland=" . Finland . "`n"
    . "Finland_2=" . Finland_2 . "`n"
exitapp
Last edited by garry on 07 May 2020, 06:46, edited 1 time in total.
Guest

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec)

07 May 2020, 06:03

Danke Lucky Joe,
und Danke an die ergänzenden Hinweise von allen Anderen.

Die Anfrage wurde elegant gelöst.
Viel bersser als ursprünglich erwartet.

Habe den goldenen Tipp mit dem Ländercode wie folgt eingebaut:

Code: Select all

#IfWinActive, ahk_class rctrl_renwnd32 	; ahk_class zu finden über Window Spy - Code ausführen nur im Outlook 2016 Email Fenster

~^r::						; Drücke die Tasten STRG + R

Heute = %A_Now%				; Schreibe das aktuelle Datum in die Variable Heute
Wochentag := A_WDay 		; Der aktuelle 1-stellige Wochentag (1-7). 1 ist Sonntag in allen Sprach- und Regionseinstellungen.

If (Wochentag = 6) 			; Freitag
   AddiereTage := 3
Else If (Wochentag = 7)		; Samstag
   AddiereTage := 2	
Else
   AddiereTage := 1 		; So, Mo, Di, Mi, Do

EnvAdd, Heute, AddiereTage, Days 		; AddiereTage auf das aktuelle Datum

; FormatTime, Heute, %Heute%, dd-MMM		; Formatiere die Datumsanzeige wie folgt: 07.05.2020 - urspünglicher Eintrag
; FormatTime, Heute, L0x0809, dd-MMM		; languageCode_0411 := "Japanese" - alle Ländercodes zu finden unter https://www.autohotkey.com/docs/misc/Languages.htm

FormatTime, Heute, L0x0809, dd-MMM			; Englisches Datumsformat (May/Dec) languageCode_0809 := "English_United_Kingdom" 

; Gut zu wissen
; In AHK 1.1 wird der Inhalt von (fast?) allen AHK-Variablen intern als String gekennzeichnet. Führende Nullen verschwinden erst, wenn man mit den Werten rechnet.
; AHK 1.1 Arrays dagegen legen alle Werte, die als Integerwert interpretiert werden können, als 'Integer Key' an und enfernen dabei 'unnütze' führende Nullen.

Send, Reply %Heute% //{Space}		; Gibt das Ergebnis aus und und hänge // mit Leerzeichen dahinter

Heute =					; Variable Morgen löschen
AddiereTage = 			; Variable AddiereTage löschen

return
 
; Der Befehl return schließt das Makro ab und beendet hier die Skriptausführung. 
; In einem Skript, das nur aus dem gezeigten Hotstring besteht, wäre er überflüssig. 
; In der Regel definiert man in einem Skript aber mehrere Hotstrings oder Hotkeys. 
; Technisch sind diese nichts anderes als Labels, also Sprungmarken. 
; Ohne das return würde das Skript einfach weiterlaufen und den zum nächsten Eintrag gehörenden Code auch noch ausführen.
Jakobus
Posts: 56
Joined: 01 Jul 2019, 13:26

Re: Englisches Datumsformat anzeigen (z.B. aus Mai/Dez wird May/Dec) - oder andere Länderformate

12 May 2020, 06:54

Bugfix zu meine Code oben:

Statt

Code: Select all

FormatTime, Heute, L0x0809, dd-MMM	
Ergibt am Ende Reply 12-May //

Fixed Bug

Code: Select all

FormatTime, Heute, %Heute% L0x0809, dd-MMM
Gewünscht Reply 13-May //

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 36 guests