Seite 1 von 2

Uhrzeit im englischen AM/PM Format ausgeben

Verfasst: 24.07.2009 11:04
von Rokur
Hier mal eine kleine Prozedur um eine Uhrzeit im englischen Format (mit AM/PM) auszugeben:

Code: Alles auswählen

Procedure.s zeit(datum.l)
  Protected tageszeit.s = ""
  If Hour(datum) > 12
    datum - 43200 ;12 Stunden abziehen
    tageszeit = "PM"
  Else
    tageszeit = "AM"
  EndIf
  ProcedureReturn FormatDate("%hh:%ii",datum) + " " + tageszeit
EndProcedure

Debug zeit(Date(2009,7,24,11,2,0))
Debug zeit(Date(2009,7,24,14,8,0))

Verfasst: 24.07.2009 15:06
von AND51
Es geht auch kürzer, indem man in der Protected-Zeile schon einen Standardwert zuweist :wink:

Code: Alles auswählen

Procedure.s zeit(datum.i) 
  Protected tageszeit.s = "AM" 
  If Hour(datum) > 12 
    datum - 43200 ;12 Stunden abziehen 
    tageszeit = "PM" 
  EndIf 
  ProcedureReturn FormatDate("%hh:%ii",datum) + " " + tageszeit 
EndProcedure 

Debug zeit(Date(2009,7,24,11,2,0)) 
Debug zeit(Date(2009,7,24,14,8,0)) 

Verfasst: 24.07.2009 18:54
von marco2007
Stimmt der Code schon?

Code: Alles auswählen

Debug zeit(Date(2009,7,24,12,2,0))
12:02 AM
Von 12:00 bis 23:59 sollte es eigentlich PM sein...

Verfasst: 24.07.2009 18:56
von milan1612
marco2007 hat geschrieben:Stimmt der Code schon?

Code: Alles auswählen

Debug zeit(Date(2009,7,24,12,2,0))
12:02 AM
Ab 12 müßte es PM sein...

Code: Alles auswählen

...
If Hour(datum) >= 12
...
Größergleich 12...

Verfasst: 24.07.2009 19:10
von marco2007
Milan, eigentlich sollte der Urheber nachdenken, wir sind ja hier bei Tipps und Tricks.
Ich brauch den Code ja nicht...mir ist`s nur aufgefallen.

Verfasst: 24.07.2009 19:36
von Kaeru Gaman
... und die stunde nach Mitternacht wird nicht 0:xx AM sondern 12:xx AM geschrieben.
die Mittagsstunde übrigens auch, 0:xx gibt es garnicht.

also, das Ganze ist noch um einiges komplexer als einfach "- 43200"

Verfasst: 24.07.2009 20:38
von marco2007
...nur mal schnell gemacht...aber es sollte funken:

Code: Alles auswählen

Procedure.s ampm(yy, mm, dd, hh, ii, ss)
If Date(yy,mm,dd,hh,ii,ss)<0
  ProcedureReturn FormatDate("%yyyy.%mm.%dd %hh:%ii:%ss",Date(yy,mm,dd,hh,ii,ss))
Else
  If Date(yy,mm,dd, hh,ii,ss)>=Date(yy,mm,dd, 0,0,0) And Date(yy,mm,dd, hh,ii,ss)<Date(yy,mm,dd, 12,0,0)
  m.s="AM"
  Else
  m.s="PM"
  EndIf
  If hh%12=0: hh=12: Else: hh=hh%12: EndIf
  ProcedureReturn RSet(Str(hh), 2, "0")+":"+RSet(Str(ii), 2, "0")+":"+RSet(Str(ss), 2, "0")+" "+m
EndIf
EndProcedure

Debug ampm(2009, 12, 5, 23,59,59)  
Debug ampm(2009, 12, 5, 00,00,00)
Debug ampm(2009, 12, 5, 01,00,00)
Debug ampm(2009, 12, 5, 11,59,59)  
Debug ampm(2009, 12, 5, 12,00,00)
Debug ampm(2009, 12, 5, 13,00,00)
Debug ampm(2009, 12, 5, 24,00,00)
...ja, ich weiß, das hier ist häßlich und schlecht :oops:
Thread sollte man auch verschieben...

Verfasst: 24.07.2009 21:10
von Little John
Dieser am/pm-Kram ist doch sowieso aus dem vorletzten Jahrhundert. :twisted:
Gerade jetzt in Zeiten des "Global Village" wäre es nicht schlecht, wenn die Angelsachsen sich mal langsam mit den verschiedenen ISO-Formaten (also auch bei Zeitangaben) vertraut machen würden. Dabei hilft vielleicht folgende Routine, die genau die umgekehrte Umwandlung durchführt.

Code: Alles auswählen

Procedure.s AngloSaxonTime_To_ISO (inTime$)
   ; in : time of day in Anglo-Saxon format, e.g. "12:24:07 a.m." or "1.37 pm"
   ; out: time of day in 24 hour ISO format
   Protected time$, suffix$
   Protected colon, hour

   time$ = ReplaceString(StringField(inTime$, 1, " "), ".", ":")
   colon = FindString(time$, ":", 1)
   If colon = 0
      colon = Len(time$) + 1
   EndIf

   hour = Val(Left(time$, colon-1))
   If hour = 12
      hour = 0
   ElseIf hour < 1 Or hour > 12
      ProcedureReturn ""                 ; error
   EndIf

   suffix$ = LCase(StringField(inTime$, 2, " "))
   If suffix$ = "pm" Or suffix$ = "p.m."
      hour + 12
   ElseIf suffix$ <> "am" And suffix$ <> "a.m."
      ProcedureReturn ""                 ; error
   EndIf

   ProcedureReturn RSet(Str(hour), 2, "0") + Mid(time$, colon)
EndProcedure


;-- Demo
Debug AngloSaxonTime_To_ISO("12:24:07 a.m.")
Debug AngloSaxonTime_To_ISO("12:24:07 p.m.")
Debug AngloSaxonTime_To_ISO("1.37 am")
Debug AngloSaxonTime_To_ISO("1.37 pm")
Gruß, Little John

Verfasst: 24.07.2009 23:43
von marco2007
Little John hat geschrieben:Dieser am/pm-Kram ist doch sowieso aus dem vorletzten Jahrhundert. :twisted:
:allright:
that`s why: Ich brauch den Code ja nicht :D

Verfasst: 28.07.2009 12:56
von Rokur
Ups sorry, da waren ja wirklich noch ein paar Bugs drinnen.

So sollte es jetzt passen:

Code: Alles auswählen

Procedure.s inselzeit(date.l)
  Protected tageszeit.s = "AM"
  Select Hour(date)
    Case 0
      date + 43200
    Case 12
      tageszeit = "PM"
    Case 13 To 23
      date - 43200
      tageszeit = "PM"
  EndSelect
  ProcedureReturn FormatDate("%hh:%ii:%ss",date) + " " + tageszeit
EndProcedure
Und ja, natürlich ist das ein total veraltetes Format, genauso wie Datum in MM/DD/YY Schreibweise, aber deshalb kanns trotzdem vorkommen das man es mal verwenden muss. :wink: