转换YYYYMM到MMMYY


54

基于这个SO问题

挑战非常简单:给定日期格式的日期,将YYYYMM其以格式输出MMMYY

规则:

  • 输入将是数字或正好6个字符长的字符串,仅由数字组成。
  • 后两位数字介于01和之间12
  • 输出必须采用形式MMMYY,其中MMM代表月份的大写三字母代码(以下),并YY代表输入部分的最后两位数字YYYY

带有相应代码的月份列表:

MM    MMM
01    JAN
02    FEB
03    MAR
04    APR
05    MAY
06    JUN
07    JUL
08    AUG
09    SEP
10    OCT
11    NOV
12    DEC

例子:

Input     Output
201604    APR16
200001    JAN00
000112    DEC01
123405    MAY34

5
这个问题很平衡。至少在Python中,手动解析和日期库最终都差不多。
bkul

10
昨天,我在HNQ上看到SO徽标旁边的“将YYYYMM转换为MMMYY”。现在,我在PCG徽标旁边看到相同的标题。我非常困惑:)

Answers:


20

MATL,18 14 13字节

4e!Z{Zc12XOXk

输入以字符串形式提供(用单引号引起来)。

由于MATLAB能够自动解析,因此该版本只能在MATLAB的MATL中运行datestr('2016 04')

说明

        % Implicitly grab input as a string
4e!     % Reshape input to be 2 x 4 (puts the year in row 1 and month in row 2)
Z{      % Place each row in a separate cell
Zc      % Join them together using a space to create 'yyyy mm' format
12      % Number literal, pre-defined datestring of 'mmmyy'
XO      % Convert from serial date number to string using this format
Xk      % Convert to uppercase
        % Implicitly display

这是一个可以在Octave上使用的18字节版本(因此是在线解释器)

'yyyymm'2$YO12XOXk

在线尝试

所有测试用例的修改版本

说明

            % Implicitly grab input as a string
'yyyymm'    % Push the format string as a string literal
2$YO        % Convert to a serial date number
12          % Number literal, pre-defined datestring of 'mmmyy'
XO          % Convert from serial date number to string using this format
Xk          % Convert to uppercase
            % Implicitly display

3
我看不出有什么办法可以击败。.gg
Adnan

20

Python 3,70个字节

from time import*
lambda s:strftime("%b%y",strptime(s,"%Y%m")).upper()

这使用了内置strftimestrptime功能。

再增加1个字节,这是一个手动解析字符串的版本:

lambda s:" JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[int(s[4:])::12]+s[2:4]

这以一种有趣的方式对月份名称进行了编码(感谢Henry Gomersall节省了一个字节)。


11
手动解析太疯狂了。
Morgan Thrapp

@MorganThrapp我从这个答案中得到了这个主意。
bkul

1
如果您使用数字作为输入,则您的手册版本可以在Python 2中以69字节完成lambda n:"JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[n%100-1::12]+`n`[2:4]
xnor

1
尽管这丢失了一个字节:lambda s:" JFMAMJJASONDAEAPAUUUECOENBRRYNLGPTVC"[int(s[4:])::12]+s[2:4]
Henry Gomersall

1
@ a25bedc5-3d09-41b8-82fb-ea6c353d75ae-“导入时间”将为您节省6个字符,但将花费10(“时间”,两次)
TLW


18

PowerShell v2 +,49个 46字节

(date $args[0].insert(4,'-')-U %b%y).ToUpper()

感谢@Joey节省了3个字节!

通过命令行输入将输入$args[0]作为显式字符串(例如'201604')。使用该string.Insert()函数将a -放在适当的空间中,然后结果字符串形成到Get-Datecmdlet的输入,其-U格式参数指定三个月的速记加两位数字的年份。我们将其封装在括号中,然后加上a .ToUpper()以使输出字符串大写。该字符串留在管道上,并且打印是隐式的。

同样,如前所述,这是对语言环境敏感的。这是我正在使用的区域设置信息,可在此正常工作。

PS C:\Tools\Scripts\golfing> get-culture

LCID             Name             DisplayName
----             ----             -----------
1033             en-US            English (United States)

您无需引用MMMyy,因为它是cmdlet的简单参数。您也可以只使用-UFormat %b%y,即使用-u %b%y更短的。旁注:此解决方案对语言环境敏感(我个人不喜欢),但是考虑到这一点,将需要更长的时间。
乔伊

优秀的电话-UFormat代替了。谢谢!我也不知道周围的报价MMMyy-将来很高兴知道。
AdmBorkBork

8

视网膜71 70字节

感谢Sp3000节省了1个字节。

字节数假定为ISO 8859-1编码。尾随换行很重要。

(..)(..)$
DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX$2$*¶$1
+`...¶

R-6`.

在线尝试!

说明

201604作为一个例子:

(..)(..)$
DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX$2$*¶$1

这样可以将月份的最后两位数字与月份交换,同时还可以使用换行符将一月扩展为一进制,并且将月份列表倒排在前面,这样我们就可以得到:

20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX¶¶¶¶16

其中代表换行符(0x0A)。

+`...¶

现在,我们反复删除三个非换行符,然后再换行。也就是说,我们吃掉了代表一个月的每个换行从月底开始的月份列表:

20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJANXXX¶¶¶¶16
20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEBJAN¶¶¶16
20DECNOVOCTSEPAUGJULJUNMAYAPRMARFEB¶¶16
20DECNOVOCTSEPAUGJULJUNMAYAPRMAR¶16
20DECNOVOCTSEPAUGJULJUNMAYAPR16

这就是我们插入该字符的原因XXX:自月份开始从算起1,我们将始终删除至少三个字符,即使对于一月份也是如此。

R-6`.

最后,我们从末尾删除第6个字符之前的所有内容。换句话说,我们只保留最后五个字符。


那真是聪明。
AdmBorkBork

7

CJam,50 46字节

q2/1>~i("4H~0ë~³!ò²×¶7Ö"256b25b'Af+3/=\

在线尝试。感谢Martin Ender压缩字符串以节省一些字节。

说明

q2/  e# Get input and divide it into groups of 2, like ["20" "16" "04"]
1>~  e# Discard the first item and dump the remaining array to the stack
i(   e# Convert the top value (month) to an integer and decrement it, because
     e# arrays are zero-indexed
"..."256b25b e# Convert this string from base-256 to base-25
'Af+ e# "Add" a capital A to each number to get the letters
3/   e# Divide into groups of 3 to make an array of month names
=\   e# Get the requested month and swap the elements to put the year on
     e# top, so it is printed last


6

Java 7,137个字符(161个字节)

String d(String i){return Integer.toString("憯䷳烣㘿烪摿摽㛨近筍矯䏔".charAt(Integer.parseInt(i.substring(4))-1),36).toUpperCase()+i.substring(2,4);}

考虑每个月的名称(JAN,FEB等...)是以36为底的数字,并将其编码为相应的Unicode符号。然后从字符串中获取相应的符号,然后再在base 36中对其进行编码,然后再进行一些简单的字符串操作。

稍微松了一下:

String d(String input){
return 
  Integer.toString("憯䷳烣㘿烪摿摽㛨近筍矯䏔" // encoded month names
  .charAt(Integer.parseInt(input.substring(4))-1),36) // get a symbol from encoded names at position input[4:], decode it to base 36 value
  .toUpperCase()+input.substring(2,4); // get it to upper case and add year
}

您可以看到它在这里运行:https : //ideone.com/IKlnPY


5

Python,83个字节

from datetime import*
lambda x:datetime.strptime(x,'%Y%m').strftime('%b%y').upper()

我刚刚发布的答案几乎与您的答案相同。我看不到你的,因为写答案花了一段时间。如果您要我删除我的我,可以,或者您可以使用我的我得到一些额外的字节。
bkul

1
很好,您让我击败了13个字节,我承认。我也喜欢您的手动答案。
气象学家,2016年

5

Kotlin,100字节

fun f(d:String)=SimpleDateFormat("MMMyy").format(SimpleDateFormat("yyyyMM").parse(d)).toUpperCase()

Java SimpleDateFormat的直接使用


1
嗯,我不了解Kotlin,但是由于它是从Java派生的,因此您是否不应该包含SimpleDateFormat(即import java.text.*;)的导入?
凯文·克鲁伊森

由于质询要求输出,因此我假定您需要打印输出内容。
JohnWells

5

MATLAB /八度,42字节

@(x)upper(datestr(datenum(x,'yyyymm'),12))

创建一个名为的匿名函数ans,该函数使用代表日期的字符串进行调用:ans('201604')

在线演示

此解决方案用于datenum将输入日期转换为序列号,然后datestr使用预定义的输出规范mmmyy12)来生成所需格式的字符串表示形式。最后,由于大写月份不是输出选项,因此我们将upper其更改为MMMYY


1
哇,用非打高尔夫的语言击败其他所有人!
Downgoat

5

05AB1E,51 42 41字节

2ô¦`ï<•r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35B3ôsèsJ

说明

                                           # implicit input, 123405
2ô                                         # split input into pieces of 2, ['12','34','05']
  ¦`                                       # push last 2 elements to stack, '05', '34'
    ï<                                     # convert month to its int index, 4
      •r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35B        # get compressed string containing 3-letter months, 
                                             JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC
                                   3ô      # split into pieces of 3
                                             ['JAN', 'FEB', 'MAR', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEP', 'OCT', 'NOV', 'DEC']
                                     sè    # get month at index retrieved earlier, MAY
                                       sJ  # join with 2-digit year and implicitly print, MAY34

在线尝试

@Adnan提供的字符串压缩功能节省了9个字节


1
•r–ºþ¯Bê€õaPù£—^5AºüLwÇ–è•35B而不是"JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"节省9个字节。
阿德南

5

JavaScript,87 84 80 79字节

x=>(new Date(x.replace(/.{4}/,'$&-'))+'').slice(4,7).toUpperCase()+x.slice(2,4)

要获取月份,请获取日期(由“ YYYYMM”转换为“ YYYY-MM”组成),并检索5到8个字符,它们恰好是该月的前三个字母。但是将其转换为大写字母会花费很多。

演示:

function s(x) {
  return (new Date(x.replace(/.{4}/, '$&-')) + '').slice(4,7)
         .toUpperCase() + x.slice(2, 4)
}

console.log(s('201604'));
console.log(s('200001'));
console.log(s('000112'));
console.log(s('123405'));


首先应该是APR16
Downgoat

@Upgoat然后您会看到什么?
nicael

1
我要MAR16
Downgoat

@Upgoat Huh,这很奇怪,为什么会这样呢?因为我明白了
nicael

对我来说确实显示APR16,但是第三个测试用例仅对DEC我显示。
阿德南(Adnan)2016年

4

朱莉娅57 56 53字节

s->uppercase(Dates.format(DateTime(s,"yyyym"),"uyy"))

这是一个匿名函数,它接受一个字符串并返回一个字符串。要调用它,请将其分配给变量。

首先,我们DateTime使用类型构造函数和格式字符串构造一个对象。请注意,m格式字符串中的单号将同时获得一位和两位数的月数,尽管在此情况下,前一种情况无关紧要。由于未指定日期,因此假定为月的第一天。

然后,我们可以使用子模块中的Dates.format函数将值格式化为字符串Base.Dates。该字符串uyy获得三个字母的月份名称和两位数字的年份,但是结果以标题形式显示,例如Apr16而不是所需的APR16,因此我们需要uppercase它。

在线尝试!(包括所有测试用例)


4

C,147个 145 112字节

main(m){char a[99]="JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC";scanf("%4s%d",a+50,&m);printf("%.3s%s",a+--m*3,a+52);}

在线演示

谢谢ugoren


2
一些便宜的技巧-删除#include,定义m为参数- main(m)
ugoren

2
同样,该%.3s格式保存空终止。
ugoren

谢谢@ugoren!我也改为"%4s%2d""%4s%d"
Marco Marco

main(m){char a[9];scanf("%4s%d",a,&m);printf("%.3s%s","JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"+--m*3,a+2);}短很多
l4m2 '18年

4

的JavaScript ES6,77 66个字节

@Bálint节省了11个字节!

a=>(new Date(0,a[4]+a[5]-1)+"").slice(4,7).toUpperCase()+a[2]+a[3]

通过提取Date类返回的字符串来获取日期。然后大写并添加年份。

ES5版本:

var a = prompt("Enter YYYYMM: ");
result = (new Date(0,a[4]+a[5]-1)+"").slice(4,7).toUpperCase()+a[2]+a[3]
alert(result);


我做了一个66个字节相同ATOB的技术,但我不能把它复制出来
巴林特

@Bálint我以为我也有66个字节,但由于错误的复制粘贴而使我们的字节计数器出错;)
Downgoat

你可以用获得一个月的名字(Date(0,a[4]- -a[5])+"").substr(4,3)
巴林特

1
我不明白a[4]- -a[5]。怎么了a[4]+a[5]-1
尼尔

1
new Date(0,a[4]+a[5]-1)+""=>new Date(0,a[4]+a[5]-1)+0
l4m2 '18年

3

C#,94 87字节

string C(string s)=>System.DateTime.Parse(s.Insert(4,"-")).ToString("MMMyy").ToUpper();

使用C#6语法节省了7个字节。

在线尝试


您可以省略lambda的返回类型信息,即C(string s)=>...
cat


3

爪哇8,154个 113字节

import java.text.*;s->new SimpleDateFormat("MMMyy").format(new SimpleDateFormat("yyyyMM").parse(s)).toUpperCase()

说明:

在线尝试。

import java.text.*;                 // Required import for SimpleDateFormat
s->                                 // Method with String as both parameter and return-type
  new SimpleDateFormat("MMMyy")     //  Create a formatter with format "MMMyy"
   .format(                         //  Format the following:
     new SimpleDateFormat("yyyyMM") //   Create another formatter with format "yyyyMM"
     .parse(s))                     //   Parse the input with this format
  .toUpperCase()                    //  Convert everything to Uppercase and return

我认为,如果您删除导入,而直接使用引用,则可以缩短它java.text.SimpleDateFormat
Frozn

2
@Frozn实际上,它import java.text.*;是19个字节,两次java.text.前面都是SimpleDateFormat20个字节。因此它将增加1个字节而不是降低它。
凯文·克鲁伊森

哦,是的,你是对的。我一直在看未打高尔夫球的版本,并认为它等同于打高尔夫球的版本。抱歉:)
Frozn

@Frozn Ah,也有点我不好。通常,我仍然使用.*;非高尔夫代码,但这次我似乎忽略了它。由于我在工作中使用Java,因此我具有保存选项,可以自动将其转换为纯导入,而我只是忘了将其更改为import java.text.*;..
Kevin Cruijssen

2

Oracle SQL,49字节

select to_char(to_date(n,'yyyymm'),'MONyy')from t

数据必须在一个名为表中插入T与列N型的VARCHAR2(6)CHAR(6)或者,只有当所有的年是> 1000, NUMBER

用法:

drop table t;
create table t (n VARCHAR2(6));
insert into t values ('201604');
insert into t values ('200001');
insert into t values ('000112');
insert into t values ('123405');    

select to_char(to_date(n,'yyyymm'),'MONyy')from t;

是否可以使用PRINT而不是SELECT而不是使用变量作为输入来引用表?声明输入变量和分配值不会影响字节数
t-clausen.dk 2016年

是否可以从表中获取输入?该codegolf标签信息表明,没有。
pajonk

@ t-clausen.dk使用print的最短方法是58个字符:如果您有更短的方法,则begin:n:=to_char(to_date(:n,'yyyymm'),'monyy');end;print n单个input(VARIABLE n varchar2;BEGIN:n:='201605';END;)则需要42个额外字符,而不是31(insert into t values('000112');),请告诉我。
Giacomo Garabello

@pajonk在这个答案中,没有人告诉我有关表格使用的任何信息
Giacomo Garabello

1
@pajonk根据这个,你可以使用表格输入
t-clausen.dk

2

Microsoft SQL Server,57字节

SELECT UPPER(FORMAT(CAST('201601'+'01' AS DATE),'MMMyy'))

Upper功能是必需的,因为格式不会产生MMM格式模式所期望的大写月份。

用法:

drop table t;
create table t (n VARCHAR(6));
insert into t values ('201604');
insert into t values ('200001');
insert into t values ('000112');
insert into t values ('123405');    

SELECT UPPER(FORMAT(CAST(n+'01' AS DATE),'MMMyy')) FROM t

刚刚看到您的答案,就像我的很多,直到现在才注意到它,删除了我的答案
t-clausen.dk

是否可以从表中获取输入?该codegolf标签信息表明,没有。
pajonk

@pajonk,这里的答案不使用表的输入,答案是第一行,输入变量是硬编码的。请注意,您可以使用表作为输入变量,正如我之前提到的。底部是一个如何转换多个值的示例。TSQL没有STDIN或输入语句。添加数据的唯一方法是使用变量或表。我所有的答案都使用这些答案作为输入
t-clausen.dk

好的,谢谢您的澄清。
pajonk

2

Pyth,45个字节

+:."AYw2ûDÈëKH§È¼DYÉx\E±oË"J*3sgz5+3J:z2 4

在线尝试!

说明:

+:."AYw2ûDÈëKH§È¼DYÉx\E±oË"J*3sgz5+3J:z2 4
                                z           Take the input
                               g 5          Slice inclusively from index 5 to the end
                              s             Parse as an int
                            *3              Multiply by 3
                           J                Store in variable J, this also returns J
 :                                          Take a slice
  ."AYw2ûDÈëKH§È¼DYÉx\E±oË"                 Of this packed string
                           J*3sgz5          From the J we defined before
                                  +3J       To J+3
+                                           To this string, append
                                     :z     A slice of the index
                                       2 4  From [2,4).

打包的字符串包含"JANJANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC"。这两个JAN是,因此我可以为它伪一索引。

编辑:修正了与TIO混淆的错误


2

R,65个字节

function(A)paste0(toupper(month.abb[el(A:1)%%100]),substr(A,3,4))

在线尝试!

将输入作为字符串,利用常量month.abb。使用模数和substr提取相关值。


巧妙使用:来转换integer
朱塞佩

@Giuseppe不是我的主意:)我从这里拿走的。我可能可以将其应用于许多现有答案!
JayCe

@Giuseppe我刚刚发现使用一个更短的hack- el少了1个字节。
JayCe

1

J,70个字节

4(}.((,~(_3]\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'){~1-~".)~2&}.){.)]

用法

   f =: 4(}.((,~(_3]\'JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC'){~1-~".)~2&}.){.)]
   f '201604'
APR16
   f '200001'
JAN00
   f '000112'
DEC01
   f '123405'
MAY34

说明

4(}.((,~(_3]\'...'){~1-~".)~2&}.){.)] Input: s
                                    ] Identity function, gets the value s
4                                     The constant 4
                                 {.   Take the first 4 chars from s
                            2&}.      Drop the first 2 (Take the last 2) to get the year
  }.                                  Drop the first 4 chars from s to get the month
                        ".            Parse the month substring as a number
                     1-~              Subtract 1 from it
             '...'                    List of MMM month names
         _3]\                         Split the list into nonoverlapping sublists of size 3
      ,~                              Join the MMM month name with the year and return

1

Pyth,39个字节

十六进制转储:

0000000: 2b 40 63 2e 22 41 59 12 56 0a 7c bd 93 e3 1c 07 +@c."AY.V.|.....
0000010: e3 d4 d9 ed 5b 49 02 cd b4 92 83 86 22 33 73 3e ....[I......"3s>
0000020: 32 7a 3a 7a 32 20 34                            2z:z2 4

测试套件。


1

jq,35个字符

(34个字符的代码+ 1个字符的命令行选项。)

(只是尝试^Digital Trauma在其Bash答案中使用的技巧是否也可以在jq中起作用。现在,您知道是谁启发了该答案的最重要特征。(替代方法是使用该ascii_upcase功能。)

strptime("%Y%m")|strftime("%^b%y")

样本运行(-R仅在此样本中使用的选项才能通过所有测试用例。)

bash-4.3$ jq -Rr 'strptime("%Y%m")|strftime("%^b%y")' <<END
201604
200001
000112
123405
END
APR16
JAN00
DEC01
MAY34

在线测试:(不支持通过URL传递-R –因此,输入作为JSON字符串文字传递。-r不支持通过URL 传递–自己检查Raw Output。)


1

因子82 78字节

[ [ 2 tail* 10 base> month-abbreviation ] [ 4 head 2 tail ] bi append >upper ]

已说明:

[                    ! new anonymouse function block (quotation)
  [                  ! new quotation 
    2 tail*          ! "201604" -> "04"
    10 base>         ! "04"     -> 4
    month-abbreviation ! 4 -> "Apr"
  ]                  ! end quotation
  [                  ! new quotation
    4 head           ! "201604" -> "2016"
    2 tail           ! "2016"   -> "16" 
  ]                  ! end quotation
  bi                 ! bifurcate two quotations to TOS
  append             ! "Apr" "16" -> "Apr16"
  >upper             ! "Apr16"    -> "APR16"
]                    ! end quotation

1

PHP,78字节

<?=fscanf(STDIN,"%4d%d",$y,$m)?strtoupper(date("My",mktime(0,0,0,$m,1,$y))):0;

“2038年问题”可能会在某些计算机上发生,如在这里。但不是在其他人那里,就像这里


@Titus,如果有问题,请不要尝试编辑其他人的帖子,并插入自己的解决方案;相反,请对答案发表评论或自己创建一个新答案。
价值墨水

1

Swift 2.2,149字节

let f = NSDateFormatter(),g = NSDateFormatter();f.dateFormat = "yyyyMM";g.dateFormat = "MMMyy"
g.stringFromDate(f.dateFromString(i)!).uppercaseString

试图使其比Kotlin更短...遗憾的NSDateFormatter是没有设置它的初始化程序dateFormatNSDateFormatter也没有默认dateFormat值,从而导致其他损失。

Swift 3,136字节

let f = DateFormatter(),g = DateFormatter();f.dateFormat = "yyyyMM";g.dateFormat = "MMMyy"
g.string(from: f.date(from: i)!).uppercased()

由于NS在某些类上删除了前缀,因此我能够使Swift 3的答案短一些。仍然不比Kotlin短...

测试功能及案例:

import Foundation
import XCTest

func dateConverter(i: String) -> String? {
    let f = DateFormatter(),g = DateFormatter();f.dateFormat = "yyyyMM";g.dateFormat = "MMMyy"

    if let date = f.date(from: i) {
        return g.string(from: date).uppercased()
    }

    return nil
}

XCTAssert(dateConverter(i: "201604") == "APR16")
XCTAssert(dateConverter(i: "200001") == "JAN00")
XCTAssert(dateConverter(i: "000112") == "DEC01")
XCTAssert(dateConverter(i: "123405") == "MAY34")

1

R,154个 150 114 112字节

将六个数字输入到“ b”中,将前四个数字与最后两个数字分开,将2位数的月份缩写为大写,然后将其与第3位和第4位连接。

打高尔夫球:

function(b){h=substr;i=sprintf;o="%06d";cat(toupper(month.abb[as.numeric(h(i(o,b),5,6))]),h(i(o,b),3,4),sep="")}

取消高尔夫:

function(b){
   h=substr;i=sprintf;o="%06d";

   cat(
      toupper(month.abb[as.numeric(h(i(o,b),5,6))]),
      h(i(o,b),3,4),
   sep="")
}

编辑:用变量替换了重复名称;使我变得愚蠢。-2个字节,可以将函数设为匿名(谢谢,猫)。


好答案!您可以取消a=使用匿名功能

@cat我对匿名函数不太熟悉,但是如果删除了,我是否不需要在函数的开头和结尾添加括号a=。像这样的东西: (function(m) {a=3;m*a})(10)
柔软的枕头

1
不,它function(b){h=substr;i=sprintf;o="%06d";cat(toupper(month.abb[as.numeric(h(i(o,b),5,6))]),h(i(o,b),3,4),sep="")}是一个功能对象。

这似乎不起作用。在RStudio with R 3.2.3 (2015-12-10)我得到Error in i(o, b) : invalid format '%06d'; use format %s for character objects

@cat Darn新版本搞砸了一切!我正在RStudio上运行R version 3.1.1 (2014-07-10),并且工作正常。在这里如何工作,我应该获得新版本并更改代码吗?也感谢匿名功能提示!
柔软的枕头
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.