Applescript: stringa alla data

1

Sto estraendo diversi formati di data da una pagina Web.

es. Domenica 10 settembre 2017 / 09/10/2017 / 10 settembre 2017.

in the example the date is the same, but in live, the dates are completely random and different. This could be 01/2/1985 / November 10th, 2005

Il primo non ha importanza perché questa è la data corrente, che sto generando da solo e posso cambiarlo:

tell (current date)
    set strMonth to (its month as integer)
    set strDay to (its day as integer)
    set stryear to (its year as integer)
end tell

set myOwnDate to strMonth & "/" & strDay & "/" & stryear as string

Il formato che desidero è intero giorno / mese / anno, quindi 10/09/2017.

Posso cambiare le altre due stringhe (09/10/2017 / 10 settembre 2017) in questo formato?

    
posta Kevin 10.09.2017 - 13:16
fonte

1 risposta

2

Puoi utilizzare NSDataDetector ( un metodo di cacao ) per analizzare la data da una stringa.

Ecco lo script (testato su macOS Sierra ):

Attenzione: su una stringa che contiene " cifre / cifre / anno ", lo script non funziona con una stringa in " giorno / mese / anno ", la stringa deve essere nel formato" mese / giorno / anno "

use framework "Foundation"
use scripting additions

(* this script works on these formats: 
"Sunday 10th September 2017", "Sunday 10 September 2017", "Sunday 10 September 17", "September 10th, 2017", "September 10th 2017", "September 10 2017"
 "10th September 2017", "10 September 2017", "10 Sep 17"
 also work with the abbreviation ( e.g. Sep instead of September and Sun instead of Sunday) 
 also work with the localized name of (the month and the day)

"09/10/2017", "09.10.2017", "09-10-2017" : month_day_year only,  or "2016/05/22", "2016-05-22", "2016.05.22" : year_month_day only 
( month and days could be one or two digits)
*)

set myString to "Nov 5th, 2005"
set dateString to my stringToDate(myString) --> "05/11/2005"

on stringToDate(thisString) -- 
    tell current application
        -- **  finds all the matches for a date, the result is a NSArray ** 
        set m to its ((NSDataDetector's dataDetectorWithTypes:(its NSTextCheckingTypeDate) |error|:(missing value))'s matchesInString:thisString options:0 range:{0, length of thisString})
        if (count m) > 0 then
            set d to (item 1 of m)'s |date|() -- get the NSDate of the first item 
            set df to its NSDateFormatter's new() -- create a NSDateFormatter 
            df's setDateFormat:"dd/MM/yyyy" -- a specified output format: "day/month/year" (day and month = two digits, year = 4 digits)
            return (df's stringFromDate:d) as text
        end if
    end tell
    return "" -- no match in this string
end stringToDate
    
risposta data 10.09.2017 - 22:53
fonte

Leggi altre domande sui tag