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
