User Tools

Site Tools


vba:classes:date:datetime:index

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
vba:classes:date:datetime:index [27.06.2016 09:42:30]
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 ==== ==== Properties ====
-^ Property ^ Rückgabetyp ^ Beschreibung ^ +Ich unterscheide hier zwischen Properties und Attribute. Attribute haben direkt mit den Datum/Zeit zu tun, die Properties steuern das Verhalten der Klasse 
-[[#​areturnType]] ​| %%dtReturnTypes%% | get/set | Bei gewissen Methoden kann man das Rückgabetype auswählen | +^ Property ^ Rückgabetyp ​^ Get/​Set ​^ Beschreibung ^ 
-[[#sqlDateFormatString]] | String | get | SQL Formatstring | +returnType ​| %%dtReturnTypes%% | Get/Set | Bei gewissen Methoden kann man das Rückgabetype auswählen | 
-[[#toString]] | String | get Das Datumsfpormat ​als String. Wird im Interface IFormatter wieder verwendet |+| 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 116: 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 291: 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 305: 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 581: Line 662:
 ) )
 </​code>​ </​code>​
- 
- 
- 
- 
  
 ==== modify() ==== ==== modify() ====
Line 611: 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>
vba/classes/date/datetime/index.1467013350.txt.gz · Last modified: 27.06.2016 09:42:30 by yaslaw