<commit_before>package com.metaweb.gridworks.expr.functions.date;

import java.util.Calendar;
import java.util.Date;
import java.util.Properties;

import org.json.JSONException;
import org.json.JSONWriter;

import com.metaweb.gridworks.expr.EvalError;
import com.metaweb.gridworks.gel.ControlFunctionRegistry;
import com.metaweb.gridworks.gel.Function;

public class DatePart implements Function {

    public Object call(Properties bindings, Object[] args) {
        if (args.length == 2 && 
                args[0] != null && (args[0] instanceof Calendar || args[0] instanceof Date) && 
                args[1] != null && args[1] instanceof String) {
            
            String part = (String) args[1];
            if (args[0] instanceof Calendar) {
                return getPart((Calendar) args[0], part);
            } else {
                Calendar c = Calendar.getInstance();
                c.setTime((Date) args[0]);
                
                return getPart(c, part);
            }
        }
        return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " expects a date, a number and a string");
    }
    
    static private String[] s_daysOfWeek = new String[] {
        "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    };

    private Object getPart(Calendar c, String part) {
        if ("hours".equals(part) || "hour".equals(part) || "h".equals(part)) {
            return c.get(Calendar.HOUR_OF_DAY);
        } else if ("minutes".equals(part) || "minute".equals(part) || "min".equals(part)) { // avoid 'm' to avoid confusion with month
            return c.get(Calendar.MINUTE);
        } else if ("seconds".equals(part) || "sec".equals(part) || "s".equals(part)) {
            return c.get(Calendar.SECOND);
            
        } else if ("years".equals(part) || "year".equals(part)) {
            return c.get(Calendar.YEAR);
        } else if ("months".equals(part) || "month".equals(part)) { // avoid 'm' to avoid confusion with minute
            return c.get(Calendar.MONTH);
        } else if ("weeks".equals(part) || "week".equals(part) || "w".equals(part)) {
            return c.get(Calendar.WEEK_OF_MONTH);
        } else if ("days".equals(part) || "day".equals(part) || "d".equals(part)) {
            return c.get(Calendar.DAY_OF_MONTH);
        } else if ("weekday".equals(part)) {
            int r = c.get(Calendar.DAY_OF_WEEK);
            
            return s_daysOfWeek[r];
            
        } else {
            return new EvalError("Date unit '" + part + "' not recognized.");<commit_msg>Added "time" part option to datePart function.<commit_after>package com.metaweb.gridworks.expr.functions.date;

import java.util.Calendar;
import java.util.Date;
import java.util.Properties;

import org.json.JSONException;
import org.json.JSONWriter;

import com.metaweb.gridworks.expr.EvalError;
import com.metaweb.gridworks.gel.ControlFunctionRegistry;
import com.metaweb.gridworks.gel.Function;

public class DatePart implements Function {

    public Object call(Properties bindings, Object[] args) {
        if (args.length == 2 && 
                args[0] != null && (args[0] instanceof Calendar || args[0] instanceof Date) && 
                args[1] != null && args[1] instanceof String) {
            
            String part = (String) args[1];
            if (args[0] instanceof Calendar) {
                return getPart((Calendar) args[0], part);
            } else {
                Calendar c = Calendar.getInstance();
                c.setTime((Date) args[0]);
                
                return getPart(c, part);
            }
        }
        return new EvalError(ControlFunctionRegistry.getFunctionName(this) + " expects a date, a number and a string");
    }
    
    static private String[] s_daysOfWeek = new String[] {
        "Saturday", "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
    };

    private Object getPart(Calendar c, String part) {
        if ("hours".equals(part) || "hour".equals(part) || "h".equals(part)) {
            return c.get(Calendar.HOUR_OF_DAY);
        } else if ("minutes".equals(part) || "minute".equals(part) || "min".equals(part)) { // avoid 'm' to avoid confusion with month
            return c.get(Calendar.MINUTE);
        } else if ("seconds".equals(part) || "sec".equals(part) || "s".equals(part)) {
            return c.get(Calendar.SECOND);
            
        } else if ("years".equals(part) || "year".equals(part)) {
            return c.get(Calendar.YEAR);
        } else if ("months".equals(part) || "month".equals(part)) { // avoid 'm' to avoid confusion with minute
            return c.get(Calendar.MONTH);
        } else if ("weeks".equals(part) || "week".equals(part) || "w".equals(part)) {
            return c.get(Calendar.WEEK_OF_MONTH);
        } else if ("days".equals(part) || "day".equals(part) || "d".equals(part)) {
            return c.get(Calendar.DAY_OF_MONTH);
        } else if ("weekday".equals(part)) {
            int r = c.get(Calendar.DAY_OF_WEEK);
            
            return s_daysOfWeek[r];
            
        } else if ("time".equals(part)) {
            return c.getTimeInMillis();
            
        } else {
            return new EvalError("Date unit '" + part + "' not recognized.");
{'fraction_non_alphanumeric': 0.1474118529632408, 'fraction_numerical': 0.0037509377344336083, 'mean_word_length': 2.333125, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2371181', 'n_tokens_mistral': 1581, 'n_tokens_neox': 1515, 'n_words': 356}