B4A Class Save the Date! with SimpleDateFormatter

Discussion in 'Additional libraries, classes and official updates' started by stanmiller, Dec 10, 2016.

  1. stanmiller

    stanmiller Active Member Licensed User

    B4A/B4J Class - Save the Date! with SimpleDateFormatter

    SimpleDateFormatter is a helper class that uniquely formats the current date and time independent of the application-wide B4X DateTime.Format. This allows developers to format dates without needing to save and restore the calling application's format preference.

    See SimpleDateFormat for format specificatons:
    http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

    Example:
    Code:
    Private sdf1 As SimpleDateFormatter
    Private sdf2 As SimpleDateFormatter

    ' Specify different formats
    sdf1.Initialize("yyMMdd-HHmmss")
    sdf2.Initialize(
    "EEE, MMM d, ''yy")

    Log"SimpleDateFormatter Demo" )
    Log"------------------------" )

    Log"B4X DateTime:  " & DateTime.Date(DateTime.Now) & " " & DateTime.Time(DateTime.now) )
    Log"SimpleDateFormatter1:  " & sdf1.GetDateTime() )
    Log"SimpleDateFormatter2:  " & sdf2.GetDateTime() )

    ' SimpleDateFormatter Demo
    ' ------------------------
    ' B4X DateTime:  12/10/2016 14:00:07
    ' SimpleDateFormatter1:  161210-140007
    ' SimpleDateFormatter2:  Sat, Dec 10, '16
    SimpleDateFormatter Class
    Code:
    '**********************************************************************************
    '*
    '* SimpleDateFormatter.bas - Formats current date and time to string without
    '*                           changing the application's global DateTime.Format
    '*
    '* Copyright (C) 2016 MacThomas Engineering (www.macthomasengineering.com)
    '*
    '**********************************************************************************

    #Region Revision History
    '**********************************************************************************
    '* Revision History:
    '*
    '* No.        Who  Date        Description
    '* ======     ===  ==========  ====================================================
    '* 1.00.1     MTE  2016/12/11  - Revised init to inline Java class to show
    '*                               component names using constants
    '*                             - Fixed typos and updated formatting
    '* 1.00.0     MTE  2016/12/10  - First release
    '*
    '**********************************************************************************
    #End Region

    'Class module
    Sub Class_Globals

        
    Private joSimpleDateFormatter As JavaObject
        
    Private oSimpleDateFormat As Object = Null

    End Sub

    '----------------------------------------------------------------------------------
    ' Initialize() - SimpleDateFormatter
    '
    ' Example:  Dim sdf as SimpleDateFormatter
    '           sdf.Initialize( "yyMMdd-HHmmss" )
    '           Log( sdf.GetDateTime() )
    '
    ' See SimpleDateFormat for format specificatons
    ' http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
    '
    ' If the date format is invalid GetDateTime() will return an empty string
    '
    Public Sub Initialize( sDateFormat As String )
        
    Private jo As JavaObject
        
    Private Const B4X_CLASS_NAME="simpledateformatter" As String                'Name of this .BAS file without ext in lowercase
        Private Const INLINE_JAVA_CLASS_NAME="SimpleDateFormatterInline" As String  'Name of inline Java class as defined
        
        
    ' Get the package name
        jo.InitializeStatic("anywheresoftware.b4a.BA")
        
    Private sPackageName As String = jo.GetField("packageName")
      
        
    ' Set reference to the inline Java class
        ' (e.g. com.macthomasengineering.simpledatedemo.simpledateformatter.SimpleDateFormatterInline )
        joSimpleDateFormatter.InitializeStatic( sPackageName   & "." & _
                                                B4X_CLASS_NAME & 
    "." & _
                                                INLINE_JAVA_CLASS_NAME )

        
    'Get instance of SimpleDateFormat object with requested format
        oSimpleDateFormat = joSimpleDateFormatter.RunMethod( "getSimpleDateFormat"Array( sDateFormat ) )

        
    ' Report invalid format
        If ( oSimpleDateFormat = Null ) Then
            
    Log("SimpleDateFormatter: Invalid date format=" & sDateFormat )
        
    End If

    End Sub

    '----------------------------------------------------------------------------------
    ' GetDateTime() - Returns formatted date and time string
    ' based on format specified at initialization.
    '
    ' Example:  Dim sdf as SimpleDateFormatter
    '           sdf.Initialize( "yyMMdd-HHmmss" )
    '           Log( sdf.GetDateTime() )
    '
    Public Sub GetDateTime() As String
        
    Private sDateString As String

        
    If ( oSimpleDateFormat = Null ) Then
            
    Log"SimpleDateFormatter: Not initialized.")
           
    Return ("")
        
    End If

        
    ' Get current date and time in format specified
        sDateString = joSimpleDateFormatter.RunMethod( "getDateTime"Array( oSimpleDateFormat ) )

        
    Return ( sDateString )        
    End Sub

    #if java

    import java.util.Date;
    import java.text.SimpleDateFormat;

    public static class SimpleDateFormatterInline {

        /**------------------------------------------------------ getSimpleDateFormat()
        * Gets instance of SimpleDataFormat object
        * Parameter: Date format spec (ex. "yyMMdd-HHmmss" )
        * Returns: Reference to SimpleDateFormat object
        */
        public static SimpleDateFormat getSimpleDateFormat( String dateFormat ) {
            SimpleDateFormat sdf;
        
            try {
                sdf = new SimpleDateFormat( dateFormat );
            }
            catch ( IllegalArgumentException ex ){
                sdf = null;
            }
            
            return (sdf);
        }    

        /**-------------------------------------------------------------- getDateTime()
        * Get formatted date and time string
        * Parameter: SimpleDateFormat object reference
        * Returns: Current date and time formatted as String
        */
        public static String getDateTime( SimpleDateFormat sdf ) {
            String dateString;

            // If null return empty string
            if ( sdf == null ) return ("");
        
            // Format current date and time
            dateString = sdf.format( new Date() );

            return (dateString);        
        }
    }

    #end if
    Demo project attached.
     

    Attached Files:

    Last edited: Dec 11, 2016
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice