This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
vba:classes:date:datetime:index [30.03.2016 16:06:19] yaslaw |
vba:classes:date:datetime:index [04.07.2016 10:46:14] (current) yaslaw |
||
---|---|---|---|
Line 1: | Line 1: | ||
{{keywords>vba,datetime}} | {{keywords>vba,datetime}} | ||
<const> | <const> | ||
- | version=1.8.0 | + | version=1.10.0 |
- | vdate=30.03.2016 | + | vdate=04.07.2016 |
fname=datetime.cls | fname=datetime.cls | ||
ns=%NAMESPACE% | ns=%NAMESPACE% | ||
Line 24: | Line 24: | ||
</WRAP> | </WRAP> | ||
- | <note important>Die Klasse [[vba:classes:date:dateinterval:index]] muss ebenfalls installiert sein: | + | ===== Abhängigkeiten ===== |
- | {{:vba:classes:date:dateinterval.cls|}}</note> | + | Die Klasse [[vba:classes:date:dateinterval:index]] muss ebenfalls installiert sein: |
+ | {{:vba:classes:date:dateinterval.cls|}} | ||
Die ganze Geschichte mit Zeitzonen ist noch nicht umgesetzt. Wird sicher lustig mit der Nordkoreanischen Halbstundenversetzung. | Die ganze Geschichte mit Zeitzonen ist noch nicht umgesetzt. Wird sicher lustig mit der Nordkoreanischen Halbstundenversetzung. | ||
+ | Zusätzlich kann mit dem Interface [[vba:classes:iformattable]] gearbeitet werden. Über die Systemvariable ''IFormattable_exists'' kann das Interface dazugeschlatet werden. | ||
+ | |||
+ | ===== Settings / Systemvariablen ===== | ||
+ | Über 2 Systemvariablen kann der Code der Umgebung angepasst werden. | ||
+ | ***IFormattable_exists** (Boolean) Mit dieser Variabel kann das Interface [[vba:classes:iformattable]] dazu geschaltet werden. | ||
+ | ***isAccess** (Boolean) Falls der Code in Excel oder Word verwednet werden soll, muss diese Variabel auf False gesetzt werden, damit die Funktion NZ() dazugeschaltet wird | ||
===== Definitionen ===== | ===== Definitionen ===== | ||
> Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:|print_r() bzw. d()]]. | > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:|print_r() bzw. d()]]. | ||
+ | |||
==== Creatoren ==== | ==== Creatoren ==== | ||
Es gibt verschiedene Möglichkeiten ein DateTime zu initialisieren | Es gibt verschiedene Möglichkeiten ein DateTime zu initialisieren | ||
Line 51: | Line 59: | ||
| [[#modify]] | %%DateTime%% | Ändern eines speziellen Wertes | | | [[#modify]] | %%DateTime%% | Ändern eines speziellen Wertes | | ||
| [[#interval]] | Array | Erstellt eine Serie von Daten anhand eines Intervals | | | [[#interval]] | Array | Erstellt eine Serie von Daten anhand eines Intervals | | ||
+ | | [[#setProperty]] |%%DateTime%% | Setzt ein Property ung gibt ein DateTime zurück | | ||
+ | | [[#toString]] | String | Gibt das Objekt als String zurück | | ||
+ | |||
+ | ==== Properties ==== | ||
+ | Ich unterscheide hier zwischen Properties und Attribute. Attribute haben direkt mit den Datum/Zeit zu tun, die Properties steuern das Verhalten der Klasse | ||
+ | ^ Property ^ Rückgabetyp ^ Get/Set ^ Beschreibung ^ | ||
+ | | returnType | %%dtReturnTypes%% | Get/Set | Bei gewissen Methoden kann man das Rückgabetype auswählen | | ||
+ | | sqlDateFormatString | String | Get | SQL Formatstring | | ||
+ | | toString | String | Get | Datum als String im sql/vba Format. Analog zum Attribut sqlTimeStamp. Wird im Interface IFormatter wieder verwendet | | ||
==== Attribute ==== | ==== Attribute ==== | ||
Line 110: | Line 127: | ||
) | ) | ||
)</code> | )</code> | ||
+ | |||
+ | ==== Enumeratoren ==== | ||
+ | Es gibt verscheidene öffentliche Enumeratoren. | ||
+ | |||
+ | === dtParams === | ||
+ | dtParams steuert das Verhalten der Klasse. Die verschiedenen Paramter sind komulierbar, wobei nicht alle Kombinationen Sinn ergeben | ||
+ | <code vb>Public Enum dtParams | ||
+ | dtNone = 0 | ||
+ | 'Parameters zur Behandlung des InputStrings | ||
+ | dtInFormatIgnoreCase = 2 ^ 0 'Gross-Kleinschreibung bei Trennzeichen ignorieren | ||
+ | dtInFormatFormat2 = 2 ^ 1 'Beim Übergabewert iFormat handelt sich um ein Format im Stil von {$DD}.{$MM} | ||
+ | 'Paramter zur SQL-Ausgabe | ||
+ | dtOutSqlFormatUs = 2 ^ 5 'SQL Format US | ||
+ | dtOutSqlFormatIso8601 = 2 ^ 6 'SQL Format EU (ISO8601) | ||
+ | dtOutSqlFormatManual = 2 ^ 7 'Das Format wird vom User vorgegeben (muss über SqlDateFormatString oder über setParameter(dtpSqlDateFormatString, ...) gesetzt werden) | ||
+ | End Enum</code> | ||
+ | |||
+ | === dtSqlFormats === | ||
+ | Paramter um das SQL-Format zu setzen. Es sind alle auch in dtParams vorhanden. | ||
+ | <code vb>Public Enum dtSqlFormats | ||
+ | dtsqlus = dtOutSqlFormatUs 'US: #MM/DD/YYYY# | ||
+ | dtSqlIso8601 = dtOutSqlFormatIso8601 'EU, ISO-Norm: #YYYY-MM-DD# https://de.wikipedia.org/wiki/ISO_8601 | ||
+ | dtSqlManual = dtOutSqlFormatManual 'User Spezialformat | ||
+ | dtSqlDefault = dtsqlus 'Standard definieren | ||
+ | End Enum</code> | ||
+ | |||
+ | === dtReturnTypes === | ||
+ | Bei gewissen Methoden kann man das Rückgabetype auswählen | ||
+ | <code vb>Public Enum dtReturnTypes | ||
+ | dtDateTime = 2 ^ 15 'dtOutDateTime | ||
+ | dtTimestamp = 2 ^ 16 'dtOutTimestamp | ||
+ | dtRetDefault = dtDateTime | ||
+ | End Enum</code> | ||
+ | |||
+ | === dtErrorNumbers === | ||
+ | Mögliche Errors. Normalerweise programmiere ich dazu Public Const. Das geht aber in eine Class nicht. | ||
+ | <code vb>Public Enum dtErrorNumbers | ||
+ | dtErrInvalidFormat = vbObjectError + 1 'Der String passt nicht mit dem Format überein | ||
+ | dtErrNotParseble = vbObjectError + 2 'Das Format ist nicht parsbar | ||
+ | End Enum</code> | ||
+ | |||
+ | === dtProperties === | ||
+ | Attribute, die gesetzt werden können. Wird für [[#setProperty]] genutzt | ||
+ | <code vb>Public Enum dtProperties | ||
+ | dtpTimestamp | ||
+ | dtpDateValue | ||
+ | dtpTimeValue | ||
+ | dtpYear | ||
+ | dtpMonth | ||
+ | dtpDay | ||
+ | dtpHour | ||
+ | dtpMinute | ||
+ | dtpSecond | ||
+ | dtpNanoSecond | ||
+ | dtpMicroSecond | ||
+ | dtpMilliSecond | ||
+ | dtpFirstWeekOfYear | ||
+ | dtpFirstDayOfWeek | ||
+ | dtpPatternDelemiter | ||
+ | dtpDayOfWeek | ||
+ | dtpQuarter | ||
+ | dtpWeek | ||
+ | dtpDayOfYear | ||
+ | dtpSqlTimeStamp | ||
+ | dtpSqlDate | ||
+ | dtpSqlTime | ||
+ | dtpSqlFormat | ||
+ | dtpReturnType | ||
+ | dtpSqlDateFormatString | ||
+ | End Enum</code> | ||
===== Creatoren ===== | ===== Creatoren ===== | ||
Line 285: | Line 372: | ||
Dieser sagt aus, ob das Objekt selber verändert und zurückgegeben wird oder ob das Resultat eine neue DateTime-Instanz ist | Dieser sagt aus, ob das Objekt selber verändert und zurückgegeben wird oder ob das Resultat eine neue DateTime-Instanz ist | ||
- | * FALSE <del>(Default)</del>((Seit Version 1.8.0 nicht mehr)): Das Objekt selber wird veränder und eine Referenz wird zurückgegeben | + | * FALSE <del>(Default)</del>((Seit Version 1.8.0 nicht mehr)): Der Rückgabewert ist ein Clone an dem die Veränderung vorgenommen wurde. |
- | * TRUE (Default): Der Rückgabewert ist ein Clone an dem die Veränderung vorgenommen wurde | + | * TRUE (Default): Das Objekt selber wird verändert und eine Referenz wird zurückgegeben. |
== Beispiel == | == Beispiel == | ||
Line 299: | Line 386: | ||
'Die Veränderung nur als neues Objekt zurückgeben | 'Die Veränderung nur als neues Objekt zurückgeben | ||
Set dt1 = DateTime(#6/1/2015#) | Set dt1 = DateTime(#6/1/2015#) | ||
- | Set dt2 = dt1.minus("P1M", True) | + | Set dt2 = dt1.minus("P1M", False) |
print_r dt1.dateValue '-> <Date> 01.06.2015 | print_r dt1.dateValue '-> <Date> 01.06.2015 | ||
print_r dt2.dateValue '-> <Date> 01.05.2015 | print_r dt2.dateValue '-> <Date> 01.05.2015 | ||
Line 575: | Line 662: | ||
) | ) | ||
</code> | </code> | ||
- | |||
- | |||
- | |||
- | |||
==== modify() ==== | ==== modify() ==== | ||
Line 605: | Line 688: | ||
d DateTime("2015211", "YYYY@Y").modify("YYYY", 2014).diff(DateTime().trunc("D")).intervalSpec | d DateTime("2015211", "YYYY@Y").modify("YYYY", 2014).diff(DateTime().trunc("D")).intervalSpec | ||
<String> '-P1Y25D'</code> | <String> '-P1Y25D'</code> | ||
+ | |||
+ | ==== setProperty() ==== | ||
+ | Mit dieser Methode kann ein Property angepast werden und das Resultat gleich weiterverarbeiten werden. | ||
+ | <code vb>'/** | ||
+ | ' * Setzt ein Property ung gibt ein DateTime zurück | ||
+ | ' * @param dtProperties Info, welches Property gesetzt werden soll | ||
+ | ' * @param Variant Wert | ||
+ | ' * @param Boolean true: Das DateTimeObjekt wird selber verändert - False: Das Objekt selber wird nicht verändert | ||
+ | ' * @return DateTime | ||
+ | ' */ | ||
+ | Public Function setProperty( _ | ||
+ | ByVal iProperty As dtProperties, _ | ||
+ | ByVal iValue As Variant, _ | ||
+ | Optional ByVal iByRef As Boolean = C_DEFAULT_BYREF _ | ||
+ | ) As DateTime</code> | ||
+ | |||
+ | == Beispiele == | ||
+ | <code vb>? DateTime().setProperty(dtpDay,1).sqlDate | ||
+ | #06/01/2016# | ||
+ | |||
+ | ? DateTime().setProperty(dtpSqlFormat, dtSqlFormats.dtSqlIso8601).sqlDate | ||
+ | #2016-06-27# | ||
+ | |||
+ | ? DateTime().setProperty(dtpSqlFormat, dtSqlFormats.dtSqlIso8601).setProperty(dtpDay,1).sqlDate | ||
+ | #2016-06-01#</code> | ||
+ | |||
+ | ==== toString() ==== | ||
+ | Gibt den Timestampals String zurück. Das Format kann mitgegen werden. Ansonsten wird das mit dem Format [[#sqlTimeStamp]] formatiert. | ||
+ | <code>'/** | ||
+ | ' * Gibt ein String-Wert eines Objektes zurück | ||
+ | ' * @return String | ||
+ | ' */ | ||
+ | Public Property Get toString(Optional ByVal format As String) As String</code> | ||
+ | |||
+ | == Beispiele == | ||
+ | <code vb>?DateTime().toString() | ||
+ | #07/04/2016 10:43:24# | ||
+ | |||
+ | ?DateTime().toString("DD\.MM\.YYYY") | ||
+ | 04.07.2016</code> | ||
===== Code ===== | ===== Code ===== | ||
<source '%%fpath%%/%%fname%%' vb> | <source '%%fpath%%/%%fname%%' vb> |