Long ago we wrote a date parser for MarkMail which can sniff out and handle 
most dates that actually appear in mail messages.

https://github.com/marklogic/commons/blob/master/dates/date-parser.xqy

-jh-

On May 29, 2015, at 9:14 AM, David Lee <[email protected]> wrote:

> Month names, (other names like day of week, but mostly month) have an 
> ambiguity problem for parsing in the XPath date format specs, which were 
> intended originally for printing not parsing.   A degenerate case is a 
> pattern like "[MNn,3][D]" (note no separator and implementation dependent 
> widths)
> So formally the problem is intractable.
> Pragmatically the issue stems from the ICU library being used which does not 
> provide for a good mapping between W3C format picture
> and ICU patterns - around V7 time the whole datetime formatting and parsing 
> code was redone and a side effect of much better formatting
> is the inability to parse names.
>  
> I suggest something simple.  It would be in the server code if it could be 
> done generically and for all locales but it cant.
> Roughly ...
>  
> declare variable $months := ( "Jan" , "Feb" , "Mar" ... );
> let $date := "Jan 10, 2013"
> let $tok := fn:tokenize($date,",? +"),
>     $m := fn:index-of( $months, $tok[1] )  ,
>     $d := xs:integer($tok[2]),
>     $y := $tok[3]
>    
>  return ( $y  || "-" || (if( $m lt 9 ) then "0" else "") || $m ||"-" || (if(  
> $d lt 10) then "0" else "")  || $d  )
>  
> ----
> Or something similar fromthe functx library
>  
>  
> -----------------------------------------------------------------------------
> David Lee
> Lead Engineer
> MarkLogic Corporation
> [email protected]
> Phone: +1 812-482-5224
> Cell:  +1 812-630-7622
> www.marklogic.com
>  
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Danny Sokolsky
> Sent: Thursday, May 28, 2015 6:44 PM
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] XDMP-PATTERNVALUEMISMATCH: 
> xdmp:parse-dateTime
>  
> Hi Kari,
>  
> I also see the different behavior on 7 and the latest 8.  There is a bug fix 
> in my code not yet released, which is likely why it is working for me on the 
> latest 8.
>  
> The problem is with the Month names.  There is a note in the documentation 
> saying this does not always parse the month names.
>  
> The only workaround I can think of is to substitute in the month number for 
> the month name, as that seems to work on 7.0-5.  But that might get you past 
> the problem. 
>  
> For example, this works on 7.0-5.1:
>  
> let $startdateTime := "05 28 2015"
> return
> xdmp:parse-dateTime("[M1] [D1] [Y0001]", $startdateTime, "en")
>  
> =>
> 2015-05-28T00:00:00-07:00
>  
> -Danny
>  
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Kari Cowan
> Sent: Thursday, May 28, 2015 2:24 PM
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] XDMP-PATTERNVALUEMISMATCH: 
> xdmp:parse-dateTime
>  
> Hmm, I have 8.02 on my local machine, and it still throws that error so it 
> must be more recent than that version.  Either way, we’re using  v.7 in my 
> dev/stage environments (where I am seeing an error), and v.6 on production.  
> It may be a while I have 8 available to me on our live servers.
>  
> Any other workaround you might suggest?
>  
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Danny Sokolsky
> Sent: Thursday, May 28, 2015 1:50 PM
> To: MarkLogic Developer Discussion
> Subject: Re: [MarkLogic Dev General] XDMP-PATTERNVALUEMISMATCH: 
> xdmp:parse-dateTime
>  
> There are a number of bugs that have been fixed on xdmp:parse-dateTime since 
> 6.0-3. 
>  
> This works in a recent 8.0 build:
>  
> xquery version "1.0-ml";
>  
> let $startdateTime:="May 28, 2015"
> return
> fn:format-dateTime((xdmp:parse-dateTime("[MNn] [D1], [Y0001]",
>                 xs:string( $startdateTime ) )), "[Y0001]-[M01]-[D01]" )
>  
>  
> ð  2015-05-28
>  
> -Danny
>  
> From: [email protected] 
> [mailto:[email protected]] On Behalf Of Kari Cowan
> Sent: Thursday, May 28, 2015 12:38 PM
> To: [email protected]
> Subject: [MarkLogic Dev General] XDMP-PATTERNVALUEMISMATCH: 
> xdmp:parse-dateTime
>  
> Ok, so my date input below is “May 28, 2015”, but my script below says my 
> pattern doesn’t match. I think it should but according to the comment in 
> https://docs.marklogic.com/xdmp:parse-dateTime, as of 6.0-3.1 this function 
> does not round-trip non-numeric values. For example 
> format-dateTime(current-dateTime(), '[MN]') => JUNE but 
> xdmp:parse-dateTime('[MN]', 'JUNE') throws XDMP-PATTERNVALUEMISMATCH.
>  
> I need to convert a date like “May 28, 2015” to something like 2015-05-28 so 
> that I can use it to compare dates as a part of a query.  What am I missing?  
> Here’s a scriptlet that illustrates the issue.
>  
>  
>  
> xquery version "1.0-ml";
> declare namespace html = "http://www.w3.org/1999/xhtml";;
> declare namespace local="this";
>  
> declare function local:convert-date($startdateTime as xs:string) as node()*{
>                                 
> fn:format-dateTime((xdmp:parse-dateTime("[MNn] [D1], [Y0001]",
>                                                                   xs:string( 
> $startdateTime ) )),
>                                                                   
> "[Y0001]-[M01]-[D01]" )
> };
>  
> declare variable $startdateTime as xs:string external;
>  
> let $startdateTime:="May 28, 2015"
>  
> (:
> return $startdateTime
> :)
>  
> let $this-start-date:= local:convert-date($startdateTime)    
>                
>   return $this-start-date
>  
>  
>  
> Learn more about ALM, visit http://www.alm.com . – ALM, an Integrated Media 
> Company, is a leading provider of news and information for the legal and 
> commercial real estate markets. ALM’s market-leading brands include The 
> American Lawyer, Corporate Counsel, GlobeSt.com, Insight Conferences, 
> Law.com, Law Journal Press, LegalTech, The National Law Journal and Real 
> Estate Forum.
> Learn more about ALM, visit http://www.alm.com . – ALM, an Integrated Media 
> Company, is a leading provider of news and information for the legal and 
> commercial real estate markets. ALM’s market-leading brands include The 
> American Lawyer, Corporate Counsel, GlobeSt.com, Insight Conferences, 
> Law.com, Law Journal Press, LegalTech, The National Law Journal and Real 
> Estate Forum.
> _______________________________________________
> General mailing list
> [email protected]
> Manage your subscription at: 
> http://developer.marklogic.com/mailman/listinfo/general

_______________________________________________
General mailing list
[email protected]
Manage your subscription at: 
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to