Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 使用公共Lisp在Java中创建类似SimpleDataFormat的函数_Date_Common Lisp - Fatal编程技术网

Date 使用公共Lisp在Java中创建类似SimpleDataFormat的函数

Date 使用公共Lisp在Java中创建类似SimpleDataFormat的函数,date,common-lisp,Date,Common Lisp,我发现在common lisp中没有像JavaSimpleDataFormat这样强大的工具 我很难理解简化格式的原理,所以我必须 我自己写。我写了一个函数“date formatter”,但我觉得它太难看了,并且存在一些bug 你能解释一下SimpleDataFormat是如何实现或提供强大功能的吗 (defparameter *pattern-char* "yMdhHmsS") 函数日期格式化程序: (defun date-formatter (pattern str) (let ((

我发现在common lisp中没有像Java
SimpleDataFormat
这样强大的工具

我很难理解简化格式的原理,所以我必须 我自己写。我写了一个函数“date formatter”,但我觉得它太难看了,并且存在一些bug

你能解释一下SimpleDataFormat是如何实现或提供强大功能的吗

(defparameter *pattern-char* "yMdhHmsS")
函数
日期格式化程序

(defun date-formatter (pattern str)
  (let ((year nil)
        (month nil)
        (day nil)
        (hour nil)
        (minite nil)
        (second nil)
        (index nil))
    (do* ((index 0 (+ 1 index))
          (c (subseq *pattern-char* index (+ 1 index))
             (subseq *pattern-char* index (1+ index)))
          (p  (concatenate 'string c "+")
              (concatenate 'string c "+"))
          (m (cl-ppcre:scan-to-strings p pattern)
             (cl-ppcre:scan-to-strings p pattern)))
         ((= index (1- (length *pattern-char*))))
      (if m
          (let* ((i (subseq str (search m pattern)
                            (+ (length m) (search m pattern)))))
            (cond ((< 0 (length (cl-ppcre:scan-to-strings "y+" m)))
                   (setf year (parse-integer i)))
                  ((< 0 (length (cl-ppcre:scan-to-strings "M*" m)))
                   (setf month (parse-integer i)))
                  ((< 0 (length (cl-ppcre:scan-to-strings "d*" m)))
                   (setf day (parse-integer i)))
                  ((< 0 (length (cl-ppcre:scan-to-strings "H*" m)))
                   (setf hour (parse-integer i)))
                  ((< 0 (length (cl-ppcre:scan-to-strings "m*" m)))
                   (setf minite (parse-integer i)))
                  ((< 0 (length (cl-ppcre:scan-to-strings "s*" m)))
                   (setf second (parse-integer i)))
                  (t (print "error!!"))))))
    (values year month day hour minite second)))    
是一个日期和时间的图书馆,doco在最近两个月前就开始积极开发

您可以通过在lisp shell中键入(ql:quickload:local time)并点击return来安装它(假设您已经安装了quicklisp)

这是谷歌搜索“CommonLispDateandTimes”的第三个结果,第一个是

希望他们能帮忙

[编辑]

更多信息!图书馆很酷,所以我想我应该发布以下附录:

本地时间:解析时间字符串很好,因为您可以精确地指定日期时间字符串的布局方式。默认情况下,它希望日期分隔符是#\,时间分隔符是#\:两者都是正确的(请记住#\用于指定字符),但是我必须将日期时间分隔符设置为#\空格,因为我的输入在日期和时间之间有空格。见下文

CL-USER> (local-time:parse-timestring "2013-01-23 12:12:12" :date-time-separator #\space) 
 @2013-01-23T12:12:12.000000Z
是一个日期和时间的图书馆,doco在最近两个月前就开始积极开发

您可以通过在lisp shell中键入(ql:quickload:local time)并点击return来安装它(假设您已经安装了quicklisp)

这是谷歌搜索“CommonLispDateandTimes”的第三个结果,第一个是

希望他们能帮忙

[编辑]

更多信息!图书馆很酷,所以我想我应该发布以下附录:

本地时间:解析时间字符串很好,因为您可以精确地指定日期时间字符串的布局方式。默认情况下,它希望日期分隔符是#\,时间分隔符是#\:两者都是正确的(请记住#\用于指定字符),但是我必须将日期时间分隔符设置为#\空格,因为我的输入在日期和时间之间有空格。见下文

CL-USER> (local-time:parse-timestring "2013-01-23 12:12:12" :date-time-separator #\space) 
 @2013-01-23T12:12:12.000000Z

你必须更具体地回答你的问题。这里的问题是什么?什么不起作用?这不是一个日期格式化程序,而是一个日期解析器。你必须更具体地回答你的问题。这里的问题是什么?什么不起作用?这不是一个日期格式化程序,而是一个日期解析器。